Files
asterisk/rest-api/api-docs/bridges.json
Mike Bradeen b356d182d4 res ari: Add attachable states to Channels and Bridges
Adds the ability to attach multiple states to both Channels and Bridges in the form
of variables that are included in all events on the associated object.

First, this adds an optional boolean field to channel variables 'report_events'
that causes the variable to automatically be included in all events on that channel.

To allow this, variables can now be either name value pairs (the current format):
`<variable_name>: '<value_string>'`
 - or -
`<variable_name>: {value: '<value_string>', report_events: [true|false]}`

If the old format is used or 'report_events' is not included, it will default to
false and retain current behavior.

Second, this extends both reported and unreported variables to Bridges so they too
may have stateful information.

Resolves: #1910

UserNote: Bridge variables now can be set and retrieved via the following paths:
`/bridges/{bridgeId}/variable`
`/bridges/{bridgeId}/variables`
Both Bridge and Channel variables can now be set with an optional 'report_events'
boolean flag that will cause those variables to be included on all events on that
object. The 'report_events' flag will default to False if not set to maintain
backwards capability.
To allow this, variables can now be either name value pairs (the current format):
`<variable_name>: '<value_string>'`
 - or -
`<variable_name>: {value: '<value_string>', report_events: [true|false]}`
2026-06-04 13:04:20 +00:00

1087 lines
28 KiB
JSON

{
"_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/bridges.{format}",
"since": [
"12.0.0"
],
"requiresModules": [
"res_stasis_recording",
"res_stasis_playback"
],
"apis": [
{
"path": "/bridges",
"description": "Active bridges",
"operations": [
{
"httpMethod": "GET",
"since": [
"12.0.0"
],
"summary": "List all active bridges in Asterisk.",
"nickname": "list",
"responseClass": "List[Bridge]"
},
{
"httpMethod": "POST",
"since": [
"12.0.0"
],
"summary": "Create a new bridge.",
"notes": "This bridge persists until it has been shut down, or Asterisk has been shut down.",
"nickname": "create",
"responseClass": "Bridge",
"parameters": [
{
"name": "type",
"description": "Comma separated list of bridge type attributes (mixing, holding, dtmf_events, proxy_media, video_sfu, video_single, sdp_label).",
"paramType": "query",
"required": false,
"allowMultiple": false,
"dataType": "string"
},
{
"name": "bridgeId",
"description": "Unique ID to give to the bridge being created.",
"paramType": "query",
"required": false,
"allowMultiple": false,
"dataType": "string"
},
{
"name": "name",
"description": "Name to give to the bridge being created.",
"paramType": "query",
"required": false,
"allowMultiple": false,
"dataType": "string"
},
{
"name": "variables",
"description": "The \"variables\" key in the body object holds variable key/value pairs to set on the bridge on creation. Each variable is an object containing \"value\" (string) and optional \"report_events\" (boolean) to include updates for that variable in bridge events (defaults to false). Ex. { \"name\": \"SupportBridge\", \"variables\": { \"Bridge_State\": { \"value\": \"WaitingForAgent\", \"report_events\": true } } }",
"paramType": "body",
"required": false,
"dataType": "containers",
"allowMultiple": false
}
],
"errorResponses": [
{
"code": 409,
"reason": "Bridge with the same bridgeId already exists"
}
]
}
]
},
{
"path": "/bridges/{bridgeId}",
"description": "Individual bridge",
"operations": [
{
"httpMethod": "POST",
"since": [
"12.2.0"
],
"summary": "Create a new bridge.",
"notes": "This bridge persists until it has been shut down, or Asterisk has been shut down.",
"nickname": "createWithId",
"responseClass": "Bridge",
"parameters": [
{
"name": "type",
"description": "Comma separated list of bridge type attributes (mixing, holding, dtmf_events, proxy_media, video_sfu, video_single, sdp_label) to set.",
"paramType": "query",
"required": false,
"allowMultiple": false,
"dataType": "string"
},
{
"name": "bridgeId",
"description": "Unique ID to give to the bridge being created.",
"paramType": "path",
"required": true,
"allowMultiple": false,
"dataType": "string"
},
{
"name": "name",
"description": "Set the name of the bridge.",
"paramType": "query",
"required": false,
"allowMultiple": false,
"dataType": "string"
},
{
"name": "variables",
"description": "The \"variables\" key in the body object holds variable key/value pairs to set on the bridge on creation. Each variable is an object containing \"value\" (string) and optional \"report_events\" (boolean) to include updates for that variable in bridge events (defaults to false). Ex. { \"name\": \"SupportBridge\", \"variables\": { \"Bridge_State\": { \"value\": \"WaitingForAgent\", \"report_events\": true } } }",
"paramType": "body",
"required": false,
"dataType": "containers",
"allowMultiple": false
}
],
"errorResponses": [
{
"code": 409,
"reason": "Bridge with the same bridgeId already exists"
}
]
},
{
"httpMethod": "GET",
"since": [
"12.0.0"
],
"summary": "Get bridge details.",
"nickname": "get",
"responseClass": "Bridge",
"parameters": [
{
"name": "bridgeId",
"description": "Bridge's id",
"paramType": "path",
"required": true,
"allowMultiple": false,
"dataType": "string"
}
],
"errorResponses": [
{
"code": 404,
"reason": "Bridge not found"
}
]
},
{
"httpMethod": "DELETE",
"since": [
"12.0.0"
],
"summary": "Shut down a bridge.",
"notes": "If any channels are in this bridge, they will be removed and resume whatever they were doing beforehand.",
"nickname": "destroy",
"responseClass": "void",
"parameters": [
{
"name": "bridgeId",
"description": "Bridge's id",
"paramType": "path",
"required": true,
"allowMultiple": false,
"dataType": "string"
}
],
"errorResponses": [
{
"code": 404,
"reason": "Bridge not found"
}
]
}
]
},
{
"path": "/bridges/{bridgeId}/variable",
"description": "Variables on a bridge",
"operations": [
{
"httpMethod": "GET",
"since": [
"20.20.0",
"22.10.0",
"23.4.0"
],
"summary": "Get the value of a bridge variable or function.",
"nickname": "getBridgeVar",
"responseClass": "Variable",
"parameters": [
{
"name": "bridgeId",
"description": "Bridge's id",
"paramType": "path",
"required": true,
"allowMultiple": false,
"dataType": "string"
},
{
"name": "variable",
"description": "The bridge variable or function to get",
"paramType": "query",
"required": true,
"allowMultiple": false,
"dataType": "string"
}
],
"errorResponses": [
{
"code": 400,
"reason": "Missing variable parameter."
},
{
"code": 404,
"reason": "Bridge or variable not found"
},
{
"code": 409,
"reason": "Bridge not in a Stasis application"
}
]
},
{
"httpMethod": "POST",
"since": [
"20.20.0",
"22.10.0",
"23.4.0"
],
"summary": "Set the value of a bridge variable or function.",
"nickname": "setBridgeVar",
"responseClass": "void",
"parameters": [
{
"name": "bridgeId",
"description": "Bridge's id",
"paramType": "path",
"required": true,
"allowMultiple": false,
"dataType": "string"
},
{
"name": "variable",
"description": "The bridge variable or function to set",
"paramType": "query",
"required": true,
"allowMultiple": false,
"dataType": "string"
},
{
"name": "value",
"description": "The value to set the variable to",
"paramType": "query",
"required": false,
"allowMultiple": false,
"dataType": "string"
},
{
"name": "report_events",
"description": "Whether this variable should be included in bridge events. Defaults to false.",
"paramType": "query",
"required": false,
"allowMultiple": false,
"dataType": "boolean",
"defaultValue": false
}
],
"errorResponses": [
{
"code": 400,
"reason": "Missing variable parameter."
},
{
"code": 404,
"reason": "Bridge not found"
},
{
"code": 409,
"reason": "Bridge not in a Stasis application"
}
]
}
]
},
{
"path": "/bridges/{bridgeId}/variables",
"description": "Multiple variables on a bridge",
"operations": [
{
"httpMethod": "GET",
"since": [
"20.20.0",
"22.10.0",
"23.4.0"
],
"summary": "Get the value of multiple bridge variables or functions.",
"nickname": "getBridgeVars",
"responseClass": "Variables",
"parameters": [
{
"name": "bridgeId",
"description": "Bridge's id",
"paramType": "path",
"required": true,
"allowMultiple": false,
"dataType": "string"
},
{
"name": "variables",
"description": "The bridge variables or functions to get",
"paramType": "query",
"required": true,
"allowMultiple": true,
"dataType": "string"
}
],
"errorResponses": [
{
"code": 400,
"reason": "Missing variables parameter."
},
{
"code": 404,
"reason": "Bridge or variable not found"
},
{
"code": 409,
"reason": "Bridge not in a Stasis application"
}
]
},
{
"httpMethod": "POST",
"since": [
"20.20.0",
"22.10.0",
"23.4.0"
],
"summary": "Set the values of multiple bridge variables or functions.",
"nickname": "setBridgeVars",
"responseClass": "void",
"parameters": [
{
"name": "bridgeId",
"description": "Bridge's id",
"paramType": "path",
"required": true,
"allowMultiple": false,
"dataType": "string"
},
{
"name": "variables",
"description": "The \"variables\" key in the body object holds variable key/value pairs to set on the bridge. Each variable value may be either a string or an object containing \"value\" (string) and optional \"report_events\" (boolean) to include updates for that variable in bridge events (defaults to false). Ex. { \"variables\": { \"Bridge_State\": \"WaitingForAgent\", \"Support_Level\": { \"value\": \"Premium\", \"report_events\": true } } }",
"paramType": "body",
"required": true,
"dataType": "containers",
"allowMultiple": false
}
],
"errorResponses": [
{
"code": 400,
"reason": "Missing variables parameter."
},
{
"code": 404,
"reason": "Bridge not found"
},
{
"code": 409,
"reason": "Bridge not in a Stasis application"
}
]
}
]
},
{
"path": "/bridges/{bridgeId}/addChannel",
"description": "Add a channel to a bridge",
"operations": [
{
"httpMethod": "POST",
"since": [
"12.0.0"
],
"summary": "Add a channel to a bridge.",
"nickname": "addChannel",
"responseClass": "void",
"parameters": [
{
"name": "bridgeId",
"description": "Bridge's id",
"paramType": "path",
"required": true,
"allowMultiple": false,
"dataType": "string"
},
{
"name": "channel",
"description": "Ids of channels to add to bridge",
"paramType": "query",
"required": true,
"allowMultiple": true,
"dataType": "string"
},
{
"name": "role",
"description": "Channel's role in the bridge",
"paramType": "query",
"required": false,
"allowMultiple": false,
"dataType": "string"
},
{
"name": "absorbDTMF",
"description": "Absorb DTMF coming from this channel, preventing it to pass through to the bridge",
"paramType": "query",
"required": false,
"allowMultiple": false,
"dataType": "boolean",
"defaultValue": false
},
{
"name": "mute",
"description": "Mute audio from this channel, preventing it to pass through to the bridge",
"paramType": "query",
"required": false,
"allowMultiple": false,
"dataType": "boolean",
"defaultValue": false
},
{
"name": "inhibitConnectedLineUpdates",
"description": "Do not present the identity of the newly connected channel to other bridge members",
"paramType": "query",
"required": false,
"allowMultiple": false,
"dataType": "boolean",
"defaultValue": false
}
],
"errorResponses": [
{
"code": 400,
"reason": "Channel not found"
},
{
"code": 404,
"reason": "Bridge not found"
},
{
"code": 409,
"reason": "Bridge not in Stasis application; Channel currently recording"
},
{
"code": 422,
"reason": "Channel not in Stasis application"
}
]
}
]
},
{
"path": "/bridges/{bridgeId}/removeChannel",
"description": "Remove a channel from a bridge",
"operations": [
{
"httpMethod": "POST",
"since": [
"12.0.0"
],
"summary": "Remove a channel from a bridge.",
"nickname": "removeChannel",
"responseClass": "void",
"parameters": [
{
"name": "bridgeId",
"description": "Bridge's id",
"paramType": "path",
"required": true,
"allowMultiple": false,
"dataType": "string"
},
{
"name": "channel",
"description": "Ids of channels to remove from bridge",
"paramType": "query",
"required": true,
"allowMultiple": true,
"dataType": "string"
}
],
"errorResponses": [
{
"code": 400,
"reason": "Channel not found"
},
{
"code": 404,
"reason": "Bridge not found"
},
{
"code": 409,
"reason": "Bridge not in Stasis application"
},
{
"code": 422,
"reason": "Channel not in this bridge"
}
]
}
]
},
{
"path": "/bridges/{bridgeId}/videoSource/{channelId}",
"description": "Set a channel as the video source in a multi-party bridge",
"operations": [
{
"httpMethod": "POST",
"since": [
"13.13.0",
"14.2.0"
],
"summary": "Set a channel as the video source in a multi-party mixing bridge. This operation has no effect on bridges with two or fewer participants.",
"nickname": "setVideoSource",
"responseClass": "void",
"parameters": [
{
"name": "bridgeId",
"description": "Bridge's id",
"paramType": "path",
"required": true,
"allowMultiple": false,
"dataType": "string"
},
{
"name": "channelId",
"description": "Channel's id",
"paramType": "path",
"required": true,
"allowMultiple": false,
"dataType": "string"
}
],
"errorResponses": [
{
"code": 404,
"reason": "Bridge or Channel not found"
},
{
"code": 409,
"reason": "Channel not in Stasis application"
},
{
"code": 422,
"reason": "Channel not in this Bridge"
}
]
}
]
},
{
"path": "/bridges/{bridgeId}/videoSource",
"description": "Removes any explicit video source",
"operations": [
{
"httpMethod": "DELETE",
"since": [
"13.13.0",
"14.2.0"
],
"summary": "Removes any explicit video source in a multi-party mixing bridge. This operation has no effect on bridges with two or fewer participants. When no explicit video source is set, talk detection will be used to determine the active video stream.",
"nickname": "clearVideoSource",
"responseClass": "void",
"parameters": [
{
"name": "bridgeId",
"description": "Bridge's id",
"paramType": "path",
"required": true,
"allowMultiple": false,
"dataType": "string"
}
],
"errorResponses": [
{
"code": 404,
"reason": "Bridge not found"
}
]
}
]
},
{
"path": "/bridges/{bridgeId}/moh",
"description": "Play music on hold to a bridge",
"operations": [
{
"httpMethod": "POST",
"since": [
"12.0.0"
],
"summary": "Play music on hold to a bridge or change the MOH class that is playing.",
"nickname": "startMoh",
"responseClass": "void",
"parameters": [
{
"name": "bridgeId",
"description": "Bridge's id",
"paramType": "path",
"required": true,
"allowMultiple": false,
"dataType": "string"
},
{
"name": "mohClass",
"description": "Channel's id",
"paramType": "query",
"required": false,
"allowMultiple": false,
"dataType": "string"
}
],
"errorResponses": [
{
"code": 404,
"reason": "Bridge not found"
},
{
"code": 409,
"reason": "Bridge not in Stasis application"
}
]
},
{
"httpMethod": "DELETE",
"since": [
"12.0.0"
],
"summary": "Stop playing music on hold to a bridge.",
"notes": "This will only stop music on hold being played via POST bridges/{bridgeId}/moh.",
"nickname": "stopMoh",
"responseClass": "void",
"parameters": [
{
"name": "bridgeId",
"description": "Bridge's id",
"paramType": "path",
"required": true,
"allowMultiple": false,
"dataType": "string"
}
],
"errorResponses": [
{
"code": 404,
"reason": "Bridge not found"
},
{
"code": 409,
"reason": "Bridge not in Stasis application"
}
]
}
]
},
{
"path": "/bridges/{bridgeId}/play",
"description": "Play media to the participants of a bridge",
"operations": [
{
"httpMethod": "POST",
"since": [
"12.0.0"
],
"summary": "Start playback of media on a bridge.",
"notes": "The media URI may be any of a number of URI's. Currently sound:, recording:, number:, digits:, characters:, and tone: URI's are supported. This operation creates a playback resource that can be used to control the playback of media (pause, rewind, fast forward, etc.)",
"nickname": "play",
"responseClass": "Playback",
"parameters": [
{
"name": "bridgeId",
"description": "Bridge's id",
"paramType": "path",
"required": true,
"allowMultiple": false,
"dataType": "string"
},
{
"name": "media",
"description": "Media URIs to play.",
"paramType": "query",
"required": true,
"allowMultiple": true,
"dataType": "string"
},
{
"name": "announcer_format",
"description": "Format of the 'Anouncer' channel attached to the bridge. Defaults to the format of the channel in the bridge with the highest sampe rate.",
"paramType": "query",
"required": false,
"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 milliseconds to skip before playing. Only applies to the first URI if multiple media URIs are specified.",
"paramType": "query",
"required": false,
"allowMultiple": false,
"dataType": "int",
"defaultValue": 0,
"allowableValues": {
"valueType": "RANGE",
"min": 0
}
},
{
"name": "skipms",
"description": "Number of milliseconds to skip for forward/reverse operations.",
"paramType": "query",
"required": false,
"allowMultiple": false,
"dataType": "int",
"defaultValue": 3000,
"allowableValues": {
"valueType": "RANGE",
"min": 0
}
},
{
"name": "playbackId",
"description": "Playback Id.",
"paramType": "query",
"required": false,
"allowMultiple": false,
"dataType": "string"
}
],
"errorResponses": [
{
"code": 404,
"reason": "Bridge not found"
},
{
"code": 409,
"reason": "Bridge not in a Stasis application"
},
{
"code": 422,
"reason": "The format specified is unknown on this system"
}
]
}
]
},
{
"path": "/bridges/{bridgeId}/play/{playbackId}",
"description": "Play media to a bridge",
"operations": [
{
"httpMethod": "POST",
"since": [
"12.3.0"
],
"summary": "Start playback of media on a bridge.",
"notes": "The media URI may be any of a number of URI's. Currently sound:, recording:, number:, digits:, characters:, and tone: URI's are supported. This operation creates a playback resource that can be used to control the playback of media (pause, rewind, fast forward, etc.)",
"nickname": "playWithId",
"responseClass": "Playback",
"parameters": [
{
"name": "bridgeId",
"description": "Bridge's id",
"paramType": "path",
"required": true,
"allowMultiple": false,
"dataType": "string"
},
{
"name": "playbackId",
"description": "Playback ID.",
"paramType": "path",
"required": true,
"allowMultiple": false,
"dataType": "string"
},
{
"name": "media",
"description": "Media URIs to play.",
"paramType": "query",
"required": true,
"allowMultiple": true,
"dataType": "string"
},
{
"name": "announcer_format",
"description": "Format of the 'Anouncer' channel attached to the bridge. Defaults to the format of the channel in the bridge with the highest sampe rate.",
"paramType": "query",
"required": false,
"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 milliseconds to skip before playing. Only applies to the first URI if multiple media URIs are specified.",
"paramType": "query",
"required": false,
"allowMultiple": false,
"dataType": "int",
"defaultValue": 0,
"allowableValues": {
"valueType": "RANGE",
"min": 0
}
},
{
"name": "skipms",
"description": "Number of milliseconds to skip for forward/reverse operations.",
"paramType": "query",
"required": false,
"allowMultiple": false,
"dataType": "int",
"defaultValue": 3000,
"allowableValues": {
"valueType": "RANGE",
"min": 0
}
}
],
"errorResponses": [
{
"code": 404,
"reason": "Bridge not found"
},
{
"code": 409,
"reason": "Bridge not in a Stasis application"
},
{
"code": 422,
"reason": "The format specified is unknown on this system"
}
]
}
]
},
{
"path": "/bridges/{bridgeId}/record",
"description": "Record audio on a bridge",
"operations": [
{
"httpMethod": "POST",
"since": [
"12.0.0"
],
"summary": "Start a recording.",
"notes": "This records the mixed audio from all channels participating in this bridge.",
"nickname": "record",
"responseClass": "LiveRecording",
"parameters": [
{
"name": "bridgeId",
"description": "Bridge's id",
"paramType": "path",
"required": true,
"allowMultiple": false,
"dataType": "string"
},
{
"name": "name",
"description": "Recording's filename",
"paramType": "query",
"required": true,
"allowMultiple": false,
"dataType": "string"
},
{
"name": "format",
"description": "Format to encode audio in",
"paramType": "query",
"required": true,
"allowMultiple": false,
"dataType": "string"
},
{
"name": "recorder_format",
"description": "Format of the 'Recorder' channel attached to the bridge. Defaults to the same format as the 'format' parameter.",
"paramType": "query",
"required": false,
"allowMultiple": false,
"dataType": "string"
},
{
"name": "maxDurationSeconds",
"description": "Maximum duration of the recording, in seconds. 0 for no limit.",
"paramType": "query",
"required": false,
"allowMultiple": false,
"dataType": "int",
"defaultValue": 0,
"allowableValues": {
"valueType": "RANGE",
"min": 0
}
},
{
"name": "maxSilenceSeconds",
"description": "Maximum duration of silence, in seconds. 0 for no limit.",
"paramType": "query",
"required": false,
"allowMultiple": false,
"dataType": "int",
"defaultValue": 0,
"allowableValues": {
"valueType": "RANGE",
"min": 0
}
},
{
"name": "ifExists",
"description": "Action to take if a recording with the same name already exists.",
"paramType": "query",
"required": false,
"allowMultiple": false,
"dataType": "string",
"defaultValue": "fail",
"allowableValues": {
"valueType": "LIST",
"values": [
"fail",
"overwrite",
"append"
]
}
},
{
"name": "beep",
"description": "Play beep when recording begins",
"paramType": "query",
"required": false,
"allowMultiple": false,
"dataType": "boolean",
"defaultValue": false
},
{
"name": "terminateOn",
"description": "DTMF input to terminate recording.",
"paramType": "query",
"required": false,
"allowMultiple": false,
"dataType": "string",
"defaultValue": "none",
"allowableValues": {
"valueType": "LIST",
"values": [
"none",
"any",
"*",
"#"
]
}
}
],
"errorResponses": [
{
"code": 400,
"reason": "Invalid parameters"
},
{
"code": 404,
"reason": "Bridge not found"
},
{
"code": 409,
"reason": "Bridge is not in a Stasis application; 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"
}
]
}
]
}
],
"models": {
"Bridge": {
"id": "Bridge",
"description": "The merging of media from one or more channels.\n\nEveryone on the bridge receives the same audio.",
"properties": {
"id": {
"type": "string",
"description": "Unique identifier for this bridge",
"required": true
},
"technology": {
"type": "string",
"description": "Name of the current bridging technology",
"required": true
},
"bridge_type": {
"type": "string",
"description": "Type of bridge technology",
"required": true,
"allowableValues": {
"valueType": "LIST",
"values": [
"mixing",
"holding"
]
}
},
"bridge_class": {
"type": "string",
"description": "Bridging class",
"required": true
},
"creator": {
"type": "string",
"description": "Entity that created the bridge",
"required": true
},
"name": {
"type": "string",
"description": "Name the creator gave the bridge",
"required": true
},
"channels": {
"type": "List[string]",
"description": "Ids of channels participating in this bridge",
"required": true
},
"video_mode": {
"type": "string",
"description": "The video mode the bridge is using. One of 'none', 'talker', 'sfu', or 'single'.",
"required": false
},
"video_source_id": {
"type": "string",
"description": "The ID of the channel that is the source of video in this bridge, if one exists.",
"required": false
},
"creationtime": {
"required": true,
"type": "Date",
"description": "Timestamp when bridge was created"
},
"bridgevars": {
"required": false,
"type": "object",
"description": "Bridge variables"
}
}
}
}
}