Update API versions and UPGRADE/CHANGES for 12.2.0
[asterisk/asterisk.git] / rest-api / api-docs / channels.json
index c2d77b2..d940f43 100644 (file)
@@ -2,7 +2,7 @@
        "_copyright": "Copyright (C) 2012 - 2013, Digium, Inc.",
        "_author": "David M. Lee, II <dlee@digium.com>",
        "_svn_revision": "$Revision$",
-       "apiVersion": "0.0.1",
+       "apiVersion": "1.2.0",
        "swaggerVersion": "1.1",
        "basePath": "http://localhost:8088/stasis",
        "resourcePath": "/api-docs/channels.{format}",
                        "operations": [
                                {
                                        "httpMethod": "GET",
-                                       "summary": "List active channels.",
-                                       "nickname": "getChannels",
+                                       "summary": "List all active channels in Asterisk.",
+                                       "nickname": "list",
                                        "responseClass": "List[Channel]"
                                },
                                {
                                        "httpMethod": "POST",
                                        "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": "Originated",
+                                       "responseClass": "Channel",
                                        "parameters": [
                                                {
                                                        "name": "endpoint",
-                                                       "description": "Endpoint to call. If not specified, originate is routed via dialplan",
+                                                       "description": "Endpoint to call.",
                                                        "paramType": "query",
-                                                       "required": false,
+                                                       "required": true,
                                                        "allowMultiple": false,
                                                        "dataType": "string"
                                                },
                                                {
                                                        "name": "extension",
-                                                       "description": "Extension to dial",
+                                                       "description": "The extension to dial after the endpoint answers",
                                                        "paramType": "query",
                                                        "required": false,
                                                        "allowMultiple": false,
                                                },
                                                {
                                                        "name": "context",
-                                                       "description": "When routing via dialplan, the context use. If omitted, uses 'default'",
+                                                       "description": "The context to dial after the endpoint answers. If omitted, uses 'default'",
+                                                       "paramType": "query",
+                                                       "required": false,
+                                                       "allowMultiple": false,
+                                                       "dataType": "string"
+                                               },
+                                               {
+                                                       "name": "priority",
+                                                       "description": "The priority to dial after the endpoint answers. If omitted, uses 1",
+                                                       "paramType": "query",
+                                                       "required": false,
+                                                       "allowMultiple": false,
+                                                       "dataType": "long"
+                                               },
+                                               {
+                                                       "name": "app",
+                                                       "description": "The application that is subscribed to the originated channel, and passed to the Stasis application.",
+                                                       "paramType": "query",
+                                                       "required": false,
+                                                       "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": "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. Other keys in the body object are interpreted as query parameters. Ex. { 'endpoint': 'SIP/Alice', 'variables': { 'CALLERID(name)': 'Alice' } }",
+                                                       "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"
                                                }
+                                       ],
+                                       "errorResponses": [
+                                               {
+                                                       "code": 400,
+                                                       "reason": "Invalid parameters for originating a channel."
+                                               }
                                        ]
                                }
                        ]
                                {
                                        "httpMethod": "GET",
                                        "summary": "Channel details.",
-                                       "nickname": "getChannel",
+                                       "nickname": "get",
                                        "responseClass": "Channel",
                                        "parameters": [
                                                {
                                        ]
                                },
                                {
+                                       "httpMethod": "POST",
+                                       "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",
+                                                       "paramType": "query",
+                                                       "required": false,
+                                                       "allowMultiple": false,
+                                                       "dataType": "string"
+                                               },
+                                               {
+                                                       "name": "context",
+                                                       "description": "The context to dial after the endpoint answers. If omitted, uses 'default'",
+                                                       "paramType": "query",
+                                                       "required": false,
+                                                       "allowMultiple": false,
+                                                       "dataType": "string"
+                                               },
+                                               {
+                                                       "name": "priority",
+                                                       "description": "The priority to dial after the endpoint answers. If omitted, uses 1",
+                                                       "paramType": "query",
+                                                       "required": false,
+                                                       "allowMultiple": false,
+                                                       "dataType": "long"
+                                               },
+                                               {
+                                                       "name": "app",
+                                                       "description": "The application that is subscribed to the originated channel, and passed to the Stasis application.",
+                                                       "paramType": "query",
+                                                       "required": false,
+                                                       "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": "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. Other keys in the body object are interpreted as query parameters. Ex. { 'endpoint': 'SIP/Alice', 'variables': { 'CALLERID(name)': 'Alice' } }",
+                                                       "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"
+                                               }
+                                       ],
+                                       "errorResponses": [
+                                               {
+                                                       "code": 400,
+                                                       "reason": "Invalid parameters for originating a channel."
+                                               }
+                                       ]
+
+                               },
+                               {
                                        "httpMethod": "DELETE",
                                        "summary": "Delete (i.e. hangup) a channel.",
-                                       "nickname": "deleteChannel",
+                                       "nickname": "hangup",
                                        "responseClass": "void",
                                        "parameters": [
                                                {
                                                        "required": true,
                                                        "allowMultiple": false,
                                                        "dataType": "string"
+                                               },
+                                               {
+                                                       "name": "reason",
+                                                       "description": "Reason for hanging up the channel",
+                                                       "paramType": "query",
+                                                       "required": false,
+                                                       "allowMultiple": false,
+                                                       "dataType": "string",
+                                                       "defalutValue": "normal",
+                                                       "allowableValues": {
+                                                               "valueType": "LIST",
+                                                               "values": [
+                                                                       "normal",
+                                                                       "busy",
+                                                                       "congestion"
+                                                               ]
+                                                       }
                                                }
                                        ],
                                        "errorResponses": [
                                                {
+                                                       "code": 400,
+                                                       "reason": "Invalid reason for hangup provided"
+                                               },
+                                               {
                                                        "code": 404,
                                                        "reason": "Channel not found"
                                                }
                        ]
                },
                {
-                       "path": "/channels/{channelId}/dial",
-                       "description": "Create a new channel (originate) and bridge to this channel",
+                       "path": "/channels/{channelId}/continue",
+                       "description": "Exit application; continue execution in the dialplan",
                        "operations": [
                                {
                                        "httpMethod": "POST",
-                                       "summary": "Create a new channel (originate) and bridge to this channel.",
-                                       "nickname": "dial",
-                                       "responseClass": "Dialed",
+                                       "summary": "Exit application; continue execution in the dialplan.",
+                                       "nickname": "continueInDialplan",
+                                       "responseClass": "void",
                                        "parameters": [
                                                {
                                                        "name": "channelId",
                                                        "dataType": "string"
                                                },
                                                {
-                                                       "name": "endpoint",
-                                                       "description": "Endpoint to call. If not specified, dial is routed via dialplan",
+                                                       "name": "context",
+                                                       "description": "The context to continue to.",
                                                        "paramType": "query",
                                                        "required": false,
                                                        "allowMultiple": false,
                                                },
                                                {
                                                        "name": "extension",
-                                                       "description": "Extension to dial",
+                                                       "description": "The extension to continue to.",
                                                        "paramType": "query",
                                                        "required": false,
                                                        "allowMultiple": false,
                                                        "dataType": "string"
                                                },
                                                {
-                                                       "name": "context",
-                                                       "description": "When routing via dialplan, the context use. If omitted, uses 'default'",
+                                                       "name": "priority",
+                                                       "description": "The priority to continue to.",
                                                        "paramType": "query",
                                                        "required": false,
                                                        "allowMultiple": false,
+                                                       "dataType": "int"
+                                               }
+                                       ],
+                                       "errorResponses": [
+                                               {
+                                                       "code": 404,
+                                                       "reason": "Channel not found"
+                                               },
+                                               {
+                                                       "code": 409,
+                                                       "reason": "Channel not in a Stasis application"
+                                               }
+                                       ]
+                               }
+                       ]
+               },
+               {
+                       "path": "/channels/{channelId}/answer",
+                       "description": "Answer a channel",
+                       "operations": [
+                               {
+                                       "httpMethod": "POST",
+                                       "summary": "Answer a channel.",
+                                       "nickname": "answer",
+                                       "responseClass": "void",
+                                       "parameters": [
+                                               {
+                                                       "name": "channelId",
+                                                       "description": "Channel's id",
+                                                       "paramType": "path",
+                                                       "required": true,
+                                                       "allowMultiple": false,
                                                        "dataType": "string"
                                                }
                                        ],
                        ]
                },
                {
-                       "path": "/channels/{channelId}/continue",
-                       "description": "Exit application; continue execution in the dialplan",
+                       "path": "/channels/{channelId}/ring",
+                       "description": "Send a ringing indication to a channel",
                        "operations": [
                                {
                                        "httpMethod": "POST",
-                                       "summary": "Exit application; continue execution in the dialplan.",
-                                       "nickname": "continueInDialplan",
+                                       "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"
+                                               }
+                                       ]
+                               },
+                               {
+                                       "httpMethod": "DELETE",
+                                       "summary": "Stop ringing indication on a channel if locally generated.",
+                                       "nickname": "ringStop",
                                        "responseClass": "void",
                                        "parameters": [
                                                {
                        ]
                },
                {
-                       "path": "/channels/{channelId}/answer",
-                       "description": "Answer a channel",
+                       "path": "/channels/{channelId}/dtmf",
+                       "description": "Send DTMF to a channel",
                        "operations": [
                                {
                                        "httpMethod": "POST",
-                                       "summary": "Answer a channel.",
-                                       "nickname": "answerChannel",
+                                       "summary": "Send provided DTMF to a given channel.",
+                                       "nickname": "sendDTMF",
                                        "responseClass": "void",
                                        "parameters": [
                                                {
                                                        "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"
                                                }
                                        ]
                                }
                                {
                                        "httpMethod": "POST",
                                        "summary": "Mute a channel.",
-                                       "nickname": "muteChannel",
+                                       "nickname": "mute",
                                        "responseClass": "void",
                                        "parameters": [
                                                {
                                                        "reason": "Channel not in a Stasis application"
                                                }
                                        ]
-                               }
-                       ]
-               },
-               {
-                       "path": "/channels/{channelId}/unmute",
-                       "description": "Unmute a channel",
-                       "operations": [
+                               },
                                {
-                                       "httpMethod": "POST",
+                                       "httpMethod": "DELETE",
                                        "summary": "Unmute a channel.",
-                                       "nickname": "unmuteChannel",
+                                       "nickname": "unmute",
                                        "responseClass": "void",
                                        "parameters": [
                                                {
                                {
                                        "httpMethod": "POST",
                                        "summary": "Hold a channel.",
-                                       "nickname": "holdChannel",
+                                       "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"
+                                               }
+                                       ]
+                               },
+                               {
+                                       "httpMethod": "DELETE",
+                                       "summary": "Remove a channel from hold.",
+                                       "nickname": "unhold",
                                        "responseClass": "void",
                                        "parameters": [
                                                {
                        ]
                },
                {
-                       "path": "/channels/{channelId}/unhold",
-                       "description": "Remove a channel from hold",
+                       "path": "/channels/{channelId}/moh",
+                       "description": "Play music on hold to a channel",
                        "operations": [
                                {
                                        "httpMethod": "POST",
-                                       "summary": "Remove a channel from hold.",
-                                       "nickname": "unholdChannel",
+                                       "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"
+                                               }
+                                       ]
+                               },
+                               {
+                                       "httpMethod": "DELETE",
+                                       "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"
+                                               }
+                                       ]
+                               }
+                       ]
+               },
+               {
+                       "path": "/channels/{channelId}/silence",
+                       "description": "Play silence to a channel",
+                       "operations": [
+                               {
+                                       "httpMethod": "POST",
+                                       "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"
+                                               }
+                                       ]
+                               },
+                               {
+                                       "httpMethod": "DELETE",
+                                       "summary": "Stop playing silence to a channel.",
+                                       "nickname": "stopSilence",
                                        "responseClass": "void",
                                        "parameters": [
                                                {
                                {
                                        "httpMethod": "POST",
                                        "summary": "Start playback of media.",
-                                       "notes": "The media URI may be any of a number of URI's. You may use http: and https: URI's, as well as sound: and recording: URI's. This operation creates a playback resource that can be used to control the playback of media (pause, rewind, fast forward, etc.)",
-                                       "nickname": "playOnChannel",
+                                       "notes": "The media URI may be any of a number of URI's. Currently sound: and recording: 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's URI to play.",
+                                                       "paramType": "query",
+                                                       "required": true,
+                                                       "allowMultiple": false,
+                                                       "dataType": "string"
+                                               },
+                                               {
+                                                       "name": "lang",
+                                                       "description": "For sounds, selects language for sound.",
+                                                       "paramType": "query",
+                                                       "required": false,
+                                                       "allowMultiple": false,
+                                                       "dataType": "string"
+                                               },
+                                               {
+                                                       "name": "offsetms",
+                                                       "description": "Number of media to skip before playing.",
+                                                       "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"
+                                               }
+                                       ]
+                               }
+                       ]
+               },
+               {
+                       "path": "/channels/{channelId}/play/{playbackId}",
+                       "description": "Play media to a channel",
+                       "operations": [
+                               {
+                                       "httpMethod": "POST",
+                                       "summary": "Start playback of media and specify the playbackId.",
+                                       "notes": "The media URI may be any of a number of URI's. Currently sound: and recording: 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": [
                                                {
                                                        "dataType": "string"
                                                },
                                                {
+                                                       "name": "playbackId",
+                                                       "description": "Playback ID.",
+                                                       "paramType": "path",
+                                                       "required": true,
+                                                       "allowMultiple": false,
+                                                       "dataType": "string"
+                                               },
+                                               {
                                                        "name": "media",
                                                        "description": "Media's URI to play.",
                                                        "paramType": "query",
                                                        "required": true,
                                                        "allowMultiple": false,
                                                        "dataType": "string"
+                                               },
+                                               {
+                                                       "name": "lang",
+                                                       "description": "For sounds, selects language for sound.",
+                                                       "paramType": "query",
+                                                       "required": false,
+                                                       "allowMultiple": false,
+                                                       "dataType": "string"
+                                               },
+                                               {
+                                                       "name": "offsetms",
+                                                       "description": "Number of media to skip before playing.",
+                                                       "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": [
                                        "httpMethod": "POST",
                                        "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": "recordChannel",
-                                       "responseClass": "void",
+                                       "nickname": "record",
+                                       "responseClass": "LiveRecording",
                                        "parameters": [
                                                {
                                                        "name": "channelId",
                                                        "description": "Format to encode audio in",
                                                        "paramType": "query",
                                                        "required": true,
-                                                       "allowMultiple": true,
+                                                       "allowMultiple": false,
                                                        "dataType": "string"
                                                },
                                                {
                                                        "required": false,
                                                        "allowMultiple": false,
                                                        "dataType": "int",
-                                                       "defaultValue": 0
+                                                       "defaultValue": 0,
+                                                       "allowableValues": {
+                                                               "valueType": "RANGE",
+                                                               "min": 0
+                                                       }
                                                },
                                                {
                                                        "name": "maxSilenceSeconds",
                                                        "required": false,
                                                        "allowMultiple": false,
                                                        "dataType": "int",
-                                                       "defaultValue": 0
+                                                       "defaultValue": 0,
+                                                       "allowableValues": {
+                                                               "valueType": "RANGE",
+                                                               "min": 0
+                                                       }
                                                },
                                                {
-                                                       "name": "append",
-                                                       "description": "If true, and recording already exists, append to recording",
+                                                       "name": "ifExists",
+                                                       "description": "Action to take if a recording with the same name already exists.",
                                                        "paramType": "query",
                                                        "required": false,
                                                        "allowMultiple": false,
-                                                       "dataType": "boolean",
-                                                       "defaultValue": false
+                                                       "dataType": "string",
+                                                       "defaultValue": "fail",
+                                                       "allowableValues": {
+                                                               "valueType": "LIST",
+                                                               "values": [
+                                                                       "fail",
+                                                                       "overwrite",
+                                                                       "append"
+                                                               ]
+                                                       }
                                                },
                                                {
                                                        "name": "beep",
                                        ],
                                        "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 hcannels; 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",
+                                       "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 not found"
                                                },
                                                {
                                                        "code": 409,
-                                                       "reason": "Channel is not in a Stasis application."
+                                                       "reason": "Channel not in a Stasis application"
+                                               }
+                                       ]
+                               },
+                               {
+                                       "httpMethod": "POST",
+                                       "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"
+                                               }
+                                       ],
+                                       "errorResponses": [
+                                               {
+                                                       "code": 400,
+                                                       "reason": "Missing variable parameter."
+                                               },
+                                               {
+                                                       "code": 404,
+                                                       "reason": "Channel not found"
                                                },
                                                {
                                                        "code": 409,
-                                                       "reason": "The channel is currently bridges with other channels."
+                                                       "reason": "Channel not in a Stasis application"
+                                               }
+                                       ]
+                               }
+                       ]
+               },
+               {
+                       "path": "/channels/{channelId}/snoop",
+                       "description": "Snoop (spy/whisper) on a channel",
+                       "operations": [
+                               {
+                                       "httpMethod": "POST",
+                                       "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",
+                                       "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"
                                                }
                                        ]
                                }
                }
        ],
        "models": {
-               "Originated": {
-                       "id": "Originated",
-                       "properties": {}
-               },
                "Dialed": {
                        "id": "Dialed",
+                       "description": "Dialed channel information.",
                        "properties": {}
                },
                "DialplanCEP": {
                        "id": "DialplanCEP",
+                       "description": "Dialplan location (context/extension/priority)",
                        "properties": {
                                "context": {
                                        "required": true,
                },
                "CallerID": {
                        "id": "CallerID",
+                       "description": "Caller identification",
                        "properties": {
                                "name": {
                                        "required": true,
                },
                "Channel": {
                        "id": "Channel",
+                       "description": "A specific communication connection between Asterisk and an Endpoint.",
                        "properties": {
-                               "uniqueid": {
+                               "id": {
                                        "required": true,
                                        "type": "string",
-                                       "description": "Unique identifier of the channel"
+                                       "description": "Unique identifier of the channel.\n\nThis is the same as the Uniqueid field in AMI."
                                },
                                "name": {
                                        "required": true,
                                },
                                "state": {
                                        "required": true,
-                                       "type": "string"
-                               },
-                               "accountcode": {
-                                       "required": true,
-                                       "type": "string"
-                               },
-                               "peeraccount": {
-                                       "required": true,
-                                       "type": "string"
-                               },
-                               "userfield": {
-                                       "required": true,
-                                       "type": "string"
+                                       "type": "string",
+                                       "allowableValues": {
+                                               "valueType": "LIST",
+                                               "values": [
+                                                       "Down",
+                                                       "Rsrved",
+                                                       "OffHook",
+                                                       "Dialing",
+                                                       "Ring",
+                                                       "Ringing",
+                                                       "Up",
+                                                       "Busy",
+                                                       "Dialing Offhook",
+                                                       "Pre-ring",
+                                                       "Unknown"
+                                               ]
+                                       }
                                },
-                               "linkedid": {
+                               "caller": {
                                        "required": true,
-                                       "type": "string"
+                                       "type": "CallerID"
                                },
-                               "parkinglot": {
+                               "connected": {
                                        "required": true,
-                                       "type": "string"
+                                       "type": "CallerID"
                                },
-                               "hangupsource": {
+                               "accountcode": {
                                        "required": true,
                                        "type": "string"
                                },
-                               "appl": {
-                                       "required": true,
-                                       "type": "string",
-                                       "description": "Currently executing dialplan application"
-                               },
-                               "data": {
-                                       "required": true,
-                                       "type": "string",
-                                       "description": "Arguments passed to appl"
-                               },
                                "dialplan": {
                                        "required": true,
                                        "type": "DialplanCEP",
                                        "description": "Current location in the dialplan"
                                },
-                               "caller": {
-                                       "required": true,
-                                       "type": "CallerID"
-                               },
-                               "connected": {
-                                       "required": true,
-                                       "type": "CallerID"
-                               },
                                "creationtime": {
                                        "required": true,
                                        "type": "Date",