V 2.0
Group
Description
The Group API allows you to manage agent groups within the system. You can create, update, delete, and list groups. Groups are used to organize agents and manage their permissions and settings collectively.
Base URL
The base URL for all API endpoints is: deepcall/api/v2/Group
Authentication
All endpoints require authentication. Use one of the following methods:
-
SSID
-
User ID and Token
Error Responses
All endpoints may return the following error response:
Field | Type | Description |
---|---|---|
status | string | "error" |
message | string | Description of the error |
code | number | Error code |
Error Codes
Code | Description |
---|---|
1501 | The 'Name' field was not provided in the request |
1502 | GroupId is required |
1503 | Group not found or not authorized |
Notes
-
The
forward
parameter in the List Groups endpoint is used for permission checking. Iffalse
, it checks for the "AGENT_TO_AGENT_CALL" permission. -
The
quick
parameter in the List Groups endpoint, when set totrue
, returns a quicker response with potentially less detailed information. -
When filtering groups by name, the search is case-insensitive.
-
Group names are unique per user. If a duplicate name is provided, a number will be appended to make it unique.
-
When a group is deleted, all associated agent-group relations are also removed, and the group is removed from the agent profiles in Elasticsearch.
Update
Endpoint
- Method: POST
-
Path:
deepcall/api/v2/Group/update/
Description
This endpoint allows you to modify existing group details in the system. You can update a group's name and status, which is useful for rebranding teams, restructuring organizations, or temporarily deactivating groups. This endpoint requires proper authentication and the group ID for the group being updated.
Use Cases
- Renaming existing groups to reflect organizational changes
- Deactivating groups temporarily or permanently
- Updating group details during team restructuring
- Managing group visibility and accessibility
- Maintaining group information accuracy
Request Details
Parameter | Type | Required | Description |
---|---|---|---|
ssid | string | Yes* | Session ID for authentication (*if userId and token not provided) |
userId | string | Yes* | User ID for authentication (*if ssid not provided) |
token | string | Yes* | Token for authentication (*if ssid not provided) |
groupId | string | Yes | ID of the group to be updated |
name | string | Yes | New name for the group |
status | number | No | Status of the group (default: 1) |
Response Details
Success Response Structure
Field | Type | Description |
---|---|---|
status | string | Response status ("success") |
message | string | A message indicating the result of the operation |
code | number | HTTP status code (200 for success) |
Notes
- Authentication can be done via either:
- Session ID (
ssid
), or - Combination of
userId
andtoken
- Session ID (
- The
groupId
must be valid and existing in the system - The
name
field is required and must be unique - Status values:
- 1: Active (default)
- 0: Inactive
- Updating a group's status to inactive doesn't delete the group
- Group updates affect all associated agents and settings
- Changes are immediate and may impact:
- Agent assignments
- Call routing rules
- Reports and analytics
- Access permissions
- Historical data associated with the group is preserved
- Group name changes are reflected across all system interfaces
- Regular audits of group updates are recommended
- Consider the impact on active operations before updating group status
Update
var axios = require('axios');
var data = '{"userId": "{{userid}}","token":"{{token}}","name":"Mahipal singh","groupId":"28"}';
var config = {
method: 'post',
url: '{{brand}}/api/v2/Group/update',
headers: {
'Content-Length': ''
},
data : data
};
axios(config)
.then(function (response) {
console.log(JSON.stringify(response.data));
})
.catch(function (error) {
console.log(error);
});
setUrl('{{brand}}/api/v2/Group/update');
$request->setMethod(HTTP_Request2::METHOD_POST);
$request->setConfig(array(
'follow_redirects' => TRUE
));
$request->setHeader(array(
'Content-Length' => ''
));
$request->setBody('{"userId": "{{userid}}","token":"{{token}}","name":"Mahipal singh","groupId":"28"}');
try {
$response = $request->send();
if ($response->getStatus() == 200) {
echo $response->getBody();
}
else {
echo 'Unexpected HTTP status: ' . $response->getStatus() . ' ' .
$response->getReasonPhrase();
}
}
catch(HTTP_Request2_Exception $e) {
echo 'Error: ' . $e->getMessage();
}
import http.client
conn = http.client.HTTPSConnection("{{brand}}")
payload = "{\"userId\": \"{{userid}}\",\"token\":\"{{token}}\",\"name\":\"Mahipal singh\",\"groupId\":\"28\"}"
headers = {
'Content-Length': ''
}
conn.request("POST", "/api/v2/Group/update", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
var client = new RestClient("{{brand}}/api/v2/Group/update");
client.Timeout = -1;
var request = new RestRequest(Method.POST);
var body = @"{" + "\n" +
@" ""userId"": ""{{userid}}""," + "\n" +
@" ""token"":""{{token}}""," + "\n" +
@" ""name"":""Mahipal singh""," + "\n" +
@" ""groupId"":""28""" + "\n" +
@" " + "\n" +
@"}";
request.AddParameter("text/plain", body, ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
curl --location -g --request POST '{{brand}}/api/v2/Group/update' \
--data-raw '{
"userId": "{{userid}}",
"token":"{{token}}",
"name":"Mahipal singh",
"groupId":"28"
}'
var request = http.Request('POST', Uri.parse('{{brand}}/api/v2/Group/update'));
request.body = '''{\n "userId": "{{userid}}",\n "token":"{{token}}",\n "name":"Mahipal singh",\n "groupId":"28"\n \n}''';
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
package main
import (
"fmt"
"strings"
"net/http"
"io/ioutil"
)
func main() {
url := "%7B%7Bbrand%7D%7D/api/v2/Group/update"
method := "POST"
payload := strings.NewReader(`{
"userId": "{{userid}}",
"token":"{{token}}",
"name":"Mahipal singh",
"groupId":"28"
}`)
client := &http.Client {
}
req, err := http.NewRequest(method, url, payload)
if err != nil {
fmt.Println(err)
return
}
res, err := client.Do(req)
if err != nil {
fmt.Println(err)
return
}
defer res.Body.Close()
body, err := ioutil.ReadAll(res.Body)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(string(body))
}
POST /api/v2/Group/update HTTP/1.1
Host: {{brand}}
Content-Length: 106
{
"userId": "{{userid}}",
"token":"{{token}}",
"name":"Mahipal singh",
"groupId":"28"
}
OkHttpClient client = new OkHttpClient().newBuilder()
.build();
MediaType mediaType = MediaType.parse("text/plain");
RequestBody body = RequestBody.create(mediaType, "{\n \"userId\": \"{{userid}}\",\n \"token\":\"{{token}}\",\n \"name\":\"Mahipal singh\",\n \"groupId\":\"28\"\n \n}");
Request request = new Request.Builder()
.url("{{brand}}/api/v2/Group/update")
.method("POST", body)
.addHeader("Content-Length", "")
.build();
Response response = client.newCall(request).execute();
var myHeaders = new Headers();
myHeaders.append("Content-Length", "");
var raw = "{\n \"userId\": \"{{userid}}\",\n \"token\":\"{{token}}\",\n \"name\":\"Mahipal singh\",\n \"groupId\":\"28\"\n \n}";
var requestOptions = {
method: 'POST',
headers: myHeaders,
body: raw,
redirect: 'follow'
};
fetch("{{brand}}/api/v2/Group/update", requestOptions)
.then(response => response.text())
.then(result => console.log(result))
.catch(error => console.log('error', error));
CURL *curl;
CURLcode res;
curl = curl_easy_init();
if(curl) {
curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
curl_easy_setopt(curl, CURLOPT_URL, "%7B%7Bbrand%7D%7D/api/v2/Group/update");
curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
curl_easy_setopt(curl, CURLOPT_DEFAULT_PROTOCOL, "https");
struct curl_slist *headers = NULL;
headers = curl_slist_append(headers, "Content-Length: ");
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
const char *data = "{\n \"userId\": \"{{userid}}\",\n \"token\":\"{{token}}\",\n \"name\":\"Mahipal singh\",\n \"groupId\":\"28\"\n \n}";
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, data);
res = curl_easy_perform(curl);
}
curl_easy_cleanup(curl);
#import
dispatch_semaphore_t sema = dispatch_semaphore_create(0);
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"%7B%7Bbrand%7D%7D/api/v2/Group/update"]
cachePolicy:NSURLRequestUseProtocolCachePolicy
timeoutInterval:10.0];
NSDictionary *headers = @{
@"Content-Length": @""
};
[request setAllHTTPHeaderFields:headers];
NSData *postData = [[NSData alloc] initWithData:[@"{\n \"userId\": \"{{userid}}\",\n \"token\":\"{{token}}\",\n \"name\":\"Mahipal singh\",\n \"groupId\":\"28\"\n \n}" dataUsingEncoding:NSUTF8StringEncoding]];
[request setHTTPBody:postData];
[request setHTTPMethod:@"POST"];
NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request
completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
if (error) {
NSLog(@"%@", error);
dispatch_semaphore_signal(sema);
} else {
NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *) response;
NSError *parseError = nil;
NSDictionary *responseDictionary = [NSJSONSerialization JSONObjectWithData:data options:0 error:&parseError];
NSLog(@"%@",responseDictionary);
dispatch_semaphore_signal(sema);
}
}];
[dataTask resume];
dispatch_semaphore_wait(sema, DISPATCH_TIME_FOREVER);
open Lwt
open Cohttp
open Cohttp_lwt_unix
let postData = ref "{\n \"userId\": \"{{userid}}\",\n \"token\":\"{{token}}\",\n \"name\":\"Mahipal singh\",\n \"groupId\":\"28\"\n \n}";;
let reqBody =
let uri = Uri.of_string "%7B%7Bbrand%7D%7D/api/v2/Group/update" in
let headers = Header.init ()
|> fun h -> Header.add h "Content-Length" ""
in
let body = Cohttp_lwt.Body.of_string !postData in
Client.call ~headers ~body `POST uri >>= fun (_resp, body) ->
body |> Cohttp_lwt.Body.to_string >|= fun body -> body
let () =
let respBody = Lwt_main.run reqBody in
print_endline (respBody)
$headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]"
$headers.Add("Content-Length", "")
$body = "{`n `"userId`": `"{{userid}}`",`n `"token`":`"{{token}}`",`n `"name`":`"Mahipal singh`",`n `"groupId`":`"28`"`n `n}"
$response = Invoke-RestMethod '{{brand}}/api/v2/Group/update' -Method 'POST' -Headers $headers -Body $body
$response | ConvertTo-Json
require "uri"
require "net/http"
url = URI("{{brand}}/api/v2/Group/update")
http = Net::HTTP.new(url.host, url.port);
request = Net::HTTP::Post.new(url)
request["Content-Length"] = ""
request.body = "{\n \"userId\": \"{{userid}}\",\n \"token\":\"{{token}}\",\n \"name\":\"Mahipal singh\",\n \"groupId\":\"28\"\n \n}"
response = http.request(request)
puts response.read_body
printf '{
"userId": "{{userid}}",
"token":"{{token}}",
"name":"Mahipal singh",
"groupId":"28"
}'| http --follow --timeout 3600 POST '{{brand}}/api/v2/Group/update' \
Content-Length:
import Foundation
#if canImport(FoundationNetworking)
import FoundationNetworking
#endif
var semaphore = DispatchSemaphore (value: 0)
let parameters = "{\n \"userId\": \"{{userid}}\",\n \"token\":\"{{token}}\",\n \"name\":\"Mahipal singh\",\n \"groupId\":\"28\"\n \n}"
let postData = parameters.data(using: .utf8)
var request = URLRequest(url: URL(string: "{{brand}}/api/v2/Group/update")!,timeoutInterval: Double.infinity)
request.addValue("", forHTTPHeaderField: "Content-Length")
request.httpMethod = "POST"
request.httpBody = postData
let task = URLSession.shared.dataTask(with: request) { data, response, error in
guard let data = data else {
print(String(describing: error))
semaphore.signal()
return
}
print(String(data: data, encoding: .utf8)!)
semaphore.signal()
}
task.resume()
semaphore.wait()
Example Response
[{"key":"Date"
"value":"Sat
16 Nov 2024 08:38:52 GMT"}
{"key":"Content-Type"
"value":"application\/json; charset=utf-8"}
{"key":"Content-Length"
"value":"70"}
{"key":"Connection"
"value":"keep-alive"}
{"key":"Access-Control-Allow-Origin"
"value":"*"}
{"key":"Access-Control-Allow-Methods"
"value":"POST
GET
OPTIONS
PATCH
DELETE"}
{"key":"Access-Control-Allow-Headers"
"value":"X-Requested-With
content-type"}
{"key":"Access-Control-Allow-Credentials"
"value":"true"}
{"key":"Vary"
"value":"Origin"}
{"key":"ETag"
"value":"W\/\"46-60bZwbvdfLpWnMq8PsQcm21LoQw\""}
{"key":"Strict-Transport-Security"
"value":"max-age=15724800; includeSubDomains"}]
{
"status": "success",
"message": "Group updated successfully",
"code": 200
}