{
	"_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/asterisk.{format}",
	"apis": [
		{
			"path": "/asterisk/config/dynamic/{configClass}/{objectType}/{id}",
			"description": "Asterisk dynamic configuration",
			"operations": [
				{
					"httpMethod": "GET",
					"summary": "Retrieve a dynamic configuration object.",
					"nickname": "getObject",
					"responseClass": "List[ConfigTuple]",
					"parameters": [
						{
							"name": "configClass",
							"description": "The configuration class containing dynamic configuration objects.",
							"paramType": "path",
							"required": true,
							"allowMultiple": false,
							"dataType": "string"
						},
						{
							"name": "objectType",
							"description": "The type of configuration object to retrieve.",
							"paramType": "path",
							"required": true,
							"allowMultiple": false,
							"dataType": "string"
						},
						{
							"name": "id",
							"description": "The unique identifier of the object to retrieve.",
							"paramType": "path",
							"required": true,
							"allowMultiple": false,
							"dataType": "string"
						}
					],
					"errorResponses": [
						{
							"code": 404,
							"reason": "{configClass|objectType|id} not found"
						}
					]
				},
				{
					"httpMethod": "PUT",
					"summary": "Create or update a dynamic configuration object.",
					"nickname": "updateObject",
					"responseClass": "List[ConfigTuple]",
					"parameters": [
						{
							"name": "configClass",
							"description": "The configuration class containing dynamic configuration objects.",
							"paramType": "path",
							"required": true,
							"allowMultiple": false,
							"dataType": "string"
						},
						{
							"name": "objectType",
							"description": "The type of configuration object to create or update.",
							"paramType": "path",
							"required": true,
							"allowMultiple": false,
							"dataType": "string"
						},
						{
							"name": "id",
							"description": "The unique identifier of the object to create or update.",
							"paramType": "path",
							"required": true,
							"allowMultiple": false,
							"dataType": "string"
						},
						{
							"name": "fields",
							"description": "The body object should have a value that is a list of ConfigTuples, which provide the fields to update. Ex. [ { \"attribute\": \"directmedia\", \"value\": \"false\" } ]",
							"paramType": "body",
							"required": false,
							"dataType": "containers",
							"allowMultiple": false
						}
					],
					"errorResponses": [
						{
							"code": 400,
							"reason": "Bad request body"
						},
						{
							"code": 403,
							"reason": "Could not create or update object"
						},
						{
							"code": 404,
							"reason": "{configClass|objectType} not found"
						}
					]
				},
				{
					"httpMethod": "DELETE",
					"summary": "Delete a dynamic configuration object.",
					"nickname": "deleteObject",
					"responseClass": "void",
					"parameters": [
						{
							"name": "configClass",
							"description": "The configuration class containing dynamic configuration objects.",
							"paramType": "path",
							"required": true,
							"allowMultiple": false,
							"dataType": "string"
						},
						{
							"name": "objectType",
							"description": "The type of configuration object to delete.",
							"paramType": "path",
							"required": true,
							"allowMultiple": false,
							"dataType": "string"
						},
						{
							"name": "id",
							"description": "The unique identifier of the object to delete.",
							"paramType": "path",
							"required": true,
							"allowMultiple": false,
							"dataType": "string"
						}
					],
					"errorResponses": [
						{
							"code": 403,
							"reason": "Could not delete object"
						},
						{
							"code": 404,
							"reason": "{configClass|objectType|id} not found"
						}
					]
				}
			]
		},
		{
			"path": "/asterisk/info",
			"description": "Asterisk system information (similar to core show settings)",
			"operations": [
				{
					"httpMethod": "GET",
					"summary": "Gets Asterisk system information.",
					"nickname": "getInfo",
					"responseClass": "AsteriskInfo",
					"parameters": [
						{
							"name": "only",
							"description": "Filter information returned",
							"paramType": "query",
							"required": false,
							"allowMultiple": true,
							"dataType": "string",
							"allowableValues": {
								"valueType": "LIST",
								"values": [
									"build",
									"system",
									"config",
									"status"
								]
							}
						}
					]
				}
			]
		},
		{
			"path": "/asterisk/ping",
			"description": "Asterisk ping",
			"operations": [
				{
					"httpMethod": "GET",
					"summary": "Response pong message.",
					"nickname": "ping",
					"responseClass": "AsteriskPing"
				}
			]
		},
		{
			"path": "/asterisk/modules",
			"description": "Asterisk modules",
			"operations": [
				{
					"httpMethod": "GET",
					"summary": "List Asterisk modules.",
					"nickname": "listModules",
					"responseClass": "List[Module]"
				}
			]
		},
		{
			"path": "/asterisk/modules/{moduleName}",
			"description": "Asterisk module",
			"operations": [
				{
					"httpMethod": "GET",
					"summary": "Get Asterisk module information.",
					"nickname": "getModule",
					"responseClass": "Module",
					"parameters": [
						{
							"name": "moduleName",
							"description": "Module's name",
							"paramType": "path",
							"required": true,
							"allowMultiple": false,
							"dataType": "string"
						}
					],
					"errorResponses": [
						{
							"code": 404,
							"reason": "Module could not be found in running modules."
						},
						{
							"code": 409,
							"reason": "Module information could not be retrieved."
						}
					]
				},
				{
					"httpMethod": "POST",
					"summary": "Load an Asterisk module.",
					"nickname": "loadModule",
					"responseClass": "void",
					"parameters": [
						{
							"name": "moduleName",
							"description": "Module's name",
							"paramType": "path",
							"required": true,
							"allowMultiple": false,
							"dataType": "string"
						}
					],
					"errorResponses": [
						{
							"code": 409,
							"reason": "Module could not be loaded."
						}
					]
				},
				{
					"httpMethod": "DELETE",
					"summary": "Unload an Asterisk module.",
					"nickname": "unloadModule",
					"responseClass": "void",
					"parameters": [
						{
							"name": "moduleName",
							"description": "Module's name",
							"paramType": "path",
							"required": true,
							"allowMultiple": false,
							"dataType": "string"
						}
					],
					"errorResponses": [
						{
							"code": 404,
							"reason": "Module not found in running modules."
						},
						{
							"code": 409,
							"reason": "Module could not be unloaded."
						}
					]
				},
				{
					"httpMethod": "PUT",
					"summary": "Reload an Asterisk module.",
					"nickname": "reloadModule",
					"responseClass": "void",
					"parameters": [
						{
							"name": "moduleName",
							"description": "Module's name",
							"paramType": "path",
							"required": true,
							"allowMultiple": false,
							"dataType": "string"
						}
					],
					"errorResponses": [
						{
							"code": 404,
							"reason": "Module not found in running modules."
						},
						{
							"code": 409,
							"reason": "Module could not be reloaded."
						}
					]
				}
			]
		},
		{
			"path": "/asterisk/logging",
			"description": "Asterisk log channels",
			"operations": [
				{
					"httpMethod": "GET",
					"summary": "Gets Asterisk log channel information.",
					"nickname": "listLogChannels",
					"responseClass": "List[LogChannel]"
				}
			]
		},
		{
			"path": "/asterisk/logging/{logChannelName}",
			"description": "Asterisk log channel",
			"operations": [
				{
					"httpMethod": "POST",
					"summary": "Adds a log channel.",
					"nickname": "addLog",
					"responseClass": "void",
					"parameters": [
						{
							"name": "logChannelName",
							"description": "The log channel to add",
							"paramType": "path",
							"required": true,
							"allowMultiple": false,
							"dataType": "string"
						},
						{
							"name": "configuration",
							"description": "levels of the log channel",
							"paramType": "query",
							"required": true,
							"allowMultiple": false,
							"dataType": "string"
						}
					],
					"errorResponses": [
						{
							"code": 400,
							"reason": "Bad request body"
						},
						{
							"code": 409,
							"reason": "Log channel could not be created."
						}
					]
				},
				{
					"httpMethod": "DELETE",
					"summary": "Deletes a log channel.",
					"nickname": "deleteLog",
					"responseClass": "void",
					"parameters": [
						{
							"name": "logChannelName",
							"description": "Log channels name",
							"paramType": "path",
							"required": true,
							"allowMultiple": false,
							"dataType": "string"
						}
					],
					"errorResponses": [
						{
							"code": 404,
							"reason": "Log channel does not exist."
						}
					]
				}
			]
		},
		{
			"path": "/asterisk/logging/{logChannelName}/rotate",
			"description": "Asterisk log channel",
			"operations": [
				{
					"httpMethod": "PUT",
					"summary": "Rotates a log channel.",
					"nickname": "rotateLog",
					"responseClass": "void",
					"parameters": [
						{
							"name": "logChannelName",
							"description": "Log channel's name",
							"paramType": "path",
							"required": true,
							"allowMultiple": false,
							"dataType": "string"
						}
					],
					"errorResponses": [
						{
							"code": 404,
							"reason": "Log channel does not exist."
						}
					]
				}
			]
		},
		{
			"path": "/asterisk/variable",
			"description": "Global variables",
			"operations": [
				{
					"httpMethod": "GET",
					"summary": "Get the value of a global variable.",
					"nickname": "getGlobalVar",
					"responseClass": "Variable",
					"parameters": [
						{
							"name": "variable",
							"description": "The variable to get",
							"paramType": "query",
							"required": true,
							"allowMultiple": false,
							"dataType": "string"
						}
					],
					"errorResponses": [
						{
							"code": 400,
							"reason": "Missing variable parameter."
						}
					]
				},
				{
					"httpMethod": "POST",
					"summary": "Set the value of a global variable.",
					"nickname": "setGlobalVar",
					"responseClass": "void",
					"parameters": [
						{
							"name": "variable",
							"description": "The variable 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."
						}
					]
				}
			]
		}
	],
	"models": {
		"BuildInfo": {
			"id": "BuildInfo",
			"description": "Info about how Asterisk was built",
			"properties": {
				"os": {
					"required": true,
					"type": "string",
					"description": "OS Asterisk was built on."
				},
				"kernel": {
					"required": true,
					"type": "string",
					"description": "Kernel version Asterisk was built on."
				},
				"options": {
					"required": true,
					"type": "string",
					"description": "Compile time options, or empty string if default."
				},
				"machine": {
					"required": true,
					"type": "string",
					"description": "Machine architecture (x86_64, i686, ppc, etc.)"
				},
				"date": {
					"required": true,
					"type": "string",
					"description": "Date and time when Asterisk was built."
				},
				"user": {
					"required": true,
					"type": "string",
					"description": "Username that build Asterisk"
				}
			}
		},
		"SystemInfo": {
			"id": "SystemInfo",
			"description": "Info about Asterisk",
			"properties": {
				"version": {
					"required": true,
					"type": "string",
					"description": "Asterisk version."
				},
				"entity_id": {
					"required": true,
					"type": "string",
					"description": ""
				}
			}
		},
		"SetId": {
			"id": "SetId",
			"description": "Effective user/group id",
			"properties": {
				"user": {
					"required": true,
					"type": "string",
					"description": "Effective user id."
				},
				"group": {
					"required": true,
					"type": "string",
					"description": "Effective group id."
				}
			}
		},
		"ConfigInfo": {
			"id": "ConfigInfo",
			"description": "Info about Asterisk configuration",
			"properties": {
				"name": {
					"required": true,
					"type": "string",
					"description": "Asterisk system name."
				},
				"default_language": {
					"required": true,
					"type": "string",
					"description": "Default language for media playback."
				},
				"max_channels": {
					"required": false,
					"type": "int",
					"description": "Maximum number of simultaneous channels."
				},
				"max_open_files": {
					"required": false,
					"type": "int",
					"description": "Maximum number of open file handles (files, sockets)."
				},
				"max_load": {
					"required": false,
					"type": "double",
					"description": "Maximum load avg on system."
				},
				"setid": {
					"required": true,
					"type": "SetId",
					"description": "Effective user/group id for running Asterisk."
				}
			}
		},
		"StatusInfo": {
			"id": "StatusInfo",
			"description": "Info about Asterisk status",
			"properties": {
				"startup_time": {
					"required": true,
					"type": "Date",
					"description": "Time when Asterisk was started."
				},
				"last_reload_time": {
					"required": true,
					"type": "Date",
					"description": "Time when Asterisk was last reloaded."
				}
			}
		},
		"AsteriskInfo": {
			"id": "AsteriskInfo",
			"description": "Asterisk system information",
			"properties": {
				"build": {
					"required": false,
					"type": "BuildInfo",
					"description": "Info about how Asterisk was built"
				},
				"system": {
					"required": false,
					"type": "SystemInfo",
					"description": "Info about the system running Asterisk"
				},
				"config": {
					"required": false,
					"type": "ConfigInfo",
					"description": "Info about Asterisk configuration"
				},
				"status": {
					"required": false,
					"type": "StatusInfo",
					"description": "Info about Asterisk status"
				}
			}
		},
		"AsteriskPing": {
			"id": "AsteriskPing",
			"description": "Asterisk ping information",
			"properties": {
				"asterisk_id": {
					"required": true,
					"type": "string",
					"description": "Asterisk id info"
				},
				"ping": {
					"required": true,
					"type": "string",
					"description": "Always string value is pong"
				},
				"timestamp": {
					"required": true,
					"type": "string",
					"description": "The timestamp string of request received time"
				}
			}
		},
		"Module": {
			"id": "Module",
			"description": "Details of an Asterisk module",
			"properties": {
				"name": {
					"type": "string",
					"description": "The name of this module",
					"required": true
				},
				"description": {
					"type": "string",
					"description": "The description of this module",
					"required": true
				},
				"use_count": {
					"type": "int",
					"description": "The number of times this module is being used",
					"required": true
				},
				"status": {
					"type": "string",
					"description": "The running status of this module",
					"required": true
				},
				"support_level": {
					"type": "string",
					"description": "The support state of this module",
					"required": true
				}
			}
		},
		"LogChannel": {
			"id": "LogChannel",
			"description": "Details of an Asterisk log channel",
			"properties": {
				"channel": {
					"type": "string",
					"description": "The log channel path",
					"required": true
				},
				"type": {
					"type": "string",
					"description": "Types of logs for the log channel",
					"required": true
				},
				"status": {
					"type": "string",
					"description": "Whether or not a log type is enabled",
					"required": true
				},
				"configuration": {
					"type": "string",
					"description": "The various log levels",
					"required": true
				}
			}
		},
		"Variable": {
			"id": "Variable",
			"description": "The value of a channel variable",
			"properties": {
				"value": {
					"required": true,
					"type": "string",
					"description": "The value of the variable requested"
				}
			}
		},
		"ConfigTuple": {
			"id": "ConfigTuple",
			"description": "A key/value pair that makes up part of a configuration object.",
			"properties": {
				"attribute": {
					"required": true,
					"type": "string",
					"description": "A configuration object attribute."
				},
				"value": {
					"required": true,
					"type": "string",
					"description": "The value for the attribute."
				}
			}
		}
	}
}
