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: v4-api.deepcall.com/api/v2/Group

Authentication

All endpoints require authentication. Use one of the following methods:

All endpoints may return the following error response:

Field Type Description
status string "error"
message string Description of the error
code number Error code

Update

https://v4-api.deepcall.com/api/v2/Directory/update

Endpoint

Description: This endpoint allows you to update an existing contact's information in the user's directory.

Use Case: Modifying customer details or updating lead information.

Parameters:

Name Type Required Description
contact String Yes The contact number to update
contactinfo Object No Updated contact information (see table below)
other Object No Other updated information (see table below)
ssid String Conditional Session ID (required if userId and token not provided)
userId String Conditional User ID (required if ssid not provided)
token String Conditional Authentication token (required if ssid not provided)

contactinfo Object Fields:

Field Type Required Description
name String No Contact's name. Only letters, whitespace, and dot(.) are allowed
email String No Contact's email address. Must be a valid email format
dob String No Date of Birth. Format: dd-mm-YYYY
address String No Contact's address
company String No Company name
designation String No Job designation
custom_field_1 String No User-defined custom field. Validation depends on user configuration
custom_field_2 String No User-defined custom field. Validation depends on user configuration

other Object Fields:

Field Type Required Description
updatetime String No Last update time. Format: dd-mm-YYYY
lastcalltime String No Last call time. Format: dd-mm-YYYY
totalcalls Integer No Total number of calls. Must be a non-negative integer
source Integer No Source of the contact. Must be a non-negative integer
vip Boolean No VIP status. Must be true or false
blacklist Boolean No Blacklist status. Must be true or false
obd String No Outbound Dialer status
ibd String No Inbound Dialer status
pc String No Preview Call status
ctc String No Click to Call status

Notes:

Update

var axios = require('axios');
var data = '{"ssid":"{{ssid}}","contact":"{{callernumber}}","contactinfo":{"name":"Sunil Singh"}, "other":{"IBD":3,"OBD":4}}';

var config = {
 method: 'post',
 url: '{{brand}}/api/v2/Directory/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/Directory/update');
$request->setMethod(HTTP_Request2::METHOD_POST);
$request->setConfig(array(
 'follow_redirects' => TRUE
));
$request->setHeader(array(
 'Content-Length' => ''
));
$request->setBody('{"ssid":"{{ssid}}","contact":"{{callernumber}}","contactinfo":{"name":"Sunil Singh"}, "other":{"IBD":3,"OBD":4}}');
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 = "{\"ssid\":\"{{ssid}}\",\"contact\":\"{{callernumber}}\",\"contactinfo\":{\"name\":\"Sunil Singh\"}, \"other\":{\"IBD\":3,\"OBD\":4}}"
headers = {
 'Content-Length': ''
}
conn.request("POST", "/api/v2/Directory/update", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
var client = new RestClient("{{brand}}/api/v2/Directory/update");
client.Timeout = -1;
var request = new RestRequest(Method.POST);
var body = @"{" + "\n" +
@"    ""ssid"":""{{ssid}}""," + "\n" +
@"    ""contact"":""{{callernumber}}""," + "\n" +
@"    ""contactinfo"":{""name"":""Sunil Singh""}," + "\n" +
@"     ""other"":{""IBD"":3,""OBD"":4}" + "\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/Directory/update' \
--data-raw '{
    "ssid":"{{ssid}}",
    "contact":"{{callernumber}}",
    "contactinfo":{"name":"Sunil Singh"},
     "other":{"IBD":3,"OBD":4}

}'
var request = http.Request('POST', Uri.parse('{{brand}}/api/v2/Directory/update'));
request.body = '''{\n    "ssid":"{{ssid}}",\n    "contact":"{{callernumber}}",\n    "contactinfo":{"name":"Sunil Singh"},\n     "other":{"IBD":3,"OBD":4}\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/Directory/update"
   method := "POST"

   payload := strings.NewReader(`{
    "ssid":"{{ssid}}",
    "contact":"{{callernumber}}",
    "contactinfo":{"name":"Sunil Singh"},
     "other":{"IBD":3,"OBD":4}

}`)

   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/Directory/update HTTP/1.1
Host: {{brand}}
Content-Length: 134

{
    "ssid":"{{ssid}}",
    "contact":"{{callernumber}}",
    "contactinfo":{"name":"Sunil Singh"},
     "other":{"IBD":3,"OBD":4}

}
OkHttpClient client = new OkHttpClient().newBuilder()
   .build();
MediaType mediaType = MediaType.parse("text/plain");
RequestBody body = RequestBody.create(mediaType, "{\n    \"ssid\":\"{{ssid}}\",\n    \"contact\":\"{{callernumber}}\",\n    \"contactinfo\":{\"name\":\"Sunil Singh\"},\n     \"other\":{\"IBD\":3,\"OBD\":4}\n\n}");
Request request = new Request.Builder()
   .url("{{brand}}/api/v2/Directory/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    \"ssid\":\"{{ssid}}\",\n    \"contact\":\"{{callernumber}}\",\n    \"contactinfo\":{\"name\":\"Sunil Singh\"},\n     \"other\":{\"IBD\":3,\"OBD\":4}\n\n}";

var requestOptions = {
   method: 'POST',
   headers: myHeaders,
   body: raw,
   redirect: 'follow'
};

fetch("{{brand}}/api/v2/Directory/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/Directory/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    \"ssid\":\"{{ssid}}\",\n    \"contact\":\"{{callernumber}}\",\n    \"contactinfo\":{\"name\":\"Sunil Singh\"},\n     \"other\":{\"IBD\":3,\"OBD\":4}\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/Directory/update"]
   cachePolicy:NSURLRequestUseProtocolCachePolicy
   timeoutInterval:10.0];
NSDictionary *headers = @{
   @"Content-Length": @""
};

[request setAllHTTPHeaderFields:headers];
NSData *postData = [[NSData alloc] initWithData:[@"{\n    \"ssid\":\"{{ssid}}\",\n    \"contact\":\"{{callernumber}}\",\n    \"contactinfo\":{\"name\":\"Sunil Singh\"},\n     \"other\":{\"IBD\":3,\"OBD\":4}\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    \"ssid\":\"{{ssid}}\",\n    \"contact\":\"{{callernumber}}\",\n    \"contactinfo\":{\"name\":\"Sunil Singh\"},\n     \"other\":{\"IBD\":3,\"OBD\":4}\n\n}";;

let reqBody = 
   let uri = Uri.of_string "%7B%7Bbrand%7D%7D/api/v2/Directory/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    `"ssid`":`"{{ssid}}`",`n    `"contact`":`"{{callernumber}}`",`n    `"contactinfo`":{`"name`":`"Sunil Singh`"},`n     `"other`":{`"IBD`":3,`"OBD`":4}`n`n}"

$response = Invoke-RestMethod '{{brand}}/api/v2/Directory/update' -Method 'POST' -Headers $headers -Body $body
$response | ConvertTo-Json
require "uri"
require "net/http"

url = URI("{{brand}}/api/v2/Directory/update")

http = Net::HTTP.new(url.host, url.port);
request = Net::HTTP::Post.new(url)
request["Content-Length"] = ""
request.body = "{\n    \"ssid\":\"{{ssid}}\",\n    \"contact\":\"{{callernumber}}\",\n    \"contactinfo\":{\"name\":\"Sunil Singh\"},\n     \"other\":{\"IBD\":3,\"OBD\":4}\n\n}"

response = http.request(request)
puts response.read_body
printf '{
    "ssid":"{{ssid}}",
    "contact":"{{callernumber}}",
    "contactinfo":{"name":"Sunil Singh"},
     "other":{"IBD":3,"OBD":4}

}'| http  --follow --timeout 3600 POST '{{brand}}/api/v2/Directory/update' \
 Content-Length:
import Foundation
#if canImport(FoundationNetworking)
import FoundationNetworking
#endif

var semaphore = DispatchSemaphore (value: 0)

let parameters = "{\n    \"ssid\":\"{{ssid}}\",\n    \"contact\":\"{{callernumber}}\",\n    \"contactinfo\":{\"name\":\"Sunil Singh\"},\n     \"other\":{\"IBD\":3,\"OBD\":4}\n\n}"
let postData = parameters.data(using: .utf8)

var request = URLRequest(url: URL(string: "{{brand}}/api/v2/Directory/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":"Thu
 28 Nov 2024 05:11:47 GMT"}
{"key":"Content-Type"
"value":"application\/json; charset=utf-8"}
{"key":"Content-Length"
"value":"74"}
{"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\/\"4a-gQI3LNaPco2fa3tiAZFJ8Qeen2o\""}
{"key":"Strict-Transport-Security"
"value":"max-age=31536000; includeSubDomains"}]
 {
    "message": "Directory successfully updated",
    "status": "success",
    "code": 200
}
©2021-2026 DeepCall (Powered by Sarv.com). All rights reserved.