GET `https://examplebaseURL.com/v1/api/apps/{appID}/data/call-detail
| Parameter | Type | Description |
|---|---|---|
| id | String | The unique ID of the call record. |
| hid | String | The history ID of the call record. |
| svcID | String | The service account ID was used for the call. |
| date | String | The date of the call in YYMMDD format, e.g. "20230704" |
| roomID | String | The ID of the room for the call. |
| seq | Number | The sequence number of this call. |
| type | String | The type of the call. It must be a "call". |
| fromEID | String | The call ID is represented as the staff ID. |
| toEID | String | The callee (aka called party/receiver) ID of the staff ID. |
| fromSvcID | String | The service account ID of the caller. |
| toSvcID | String | The service account ID of the callee (aka called party/receiver). |
| fromRegion | String | The region of the caller. |
| callSeq | Number | The sequence number of the call record in the call history. |
| callID | String | The ID of each call record. |
| callDirection | String | The call direction. It can be "Inbound" (Inbound Call) or "Outbound" (Outbound Call). |
| callType | String | The type of the call. It can be "onnet" (On-net), "offnet"(Off-net) or "smartcall"(Smart Calling). |
| fromIP | String | The IP address of the caller. |
| callPrepareFromNum | String | The number of SIP Truck or PSTN for the call. |
| caller | Number | The caller's phone number. |
| callee | Number | The callee's (aka called party/receiver) phone number. |
| callDate | String | The start date and time of the call. The value must be in RFC3339 format, e.g. 2022-11-07T00:00:00.000Z. |
| callEndTime | String | The end date and time of the call. The value must be in RFC3339 format, e.g. 2022-11-07T00:00:00.000Z. |
| status | String | Call status. Please refer to the Call status table. |
| lastResponseCode | String | Please refer to the Bye Reason and Last Response Code page for details. |
| byeReason | String | The reason for how the call ended. Please refer to the Bye Reason and Last Response Code page for details. |
| releaseParty | String | The staff who hung up (ended) the call. |
| mediaType | String | The media type of the record. It can be "audio" (Audio) or "video" (Video). |
| isRecording | Boolean | True = The call is recorded; False = The call is not recorded. |
| hasAudioFile | Boolean | True = The audio file of the call is saved; False = The audio file of the call is not saved. |
| recordingEventList.recorderEID | String | The staff EID who recorded the call recording the call represented as a staff ID. |
| recordingEventList.startAt | String | The start date and time of recording the call. The value must be in RFC3339 format, e.g. 2022-11-07T00:00:00.000Z. |
| recordingEventList.endAt | String | The end date and time of recording the call. The value must be in RFC3339 format, e.g. 2022-11-07T00:00:00.000Z. |
| recordingEventList.files.id | string | The file ID of the call record. |
| recordingEventList.files.name | String | The file name of the call record. |
| recordingEventList.files.downloadUrl | String | The URL for downloading the call record. |
| recordingEventList.files.duration | Number | The duration of the recording is in milliseconds. |
| recordingEventList.files.mimeType | String | The file format of the record. It can be "video' or "mp4". |
| recordingEventList.files.size | Number | The file size of the record is bytes. |
| recordingEventList.files.type | Integer | The type of the recording file. The value must be 2 or 3. 2 = Video and 3 = Audio. |
| recordingEventList.files.isPrivate | Boolean | The value must be True, meaning the call record is privately accessible. |
| recordType | String | The type of the record. It can be "voicemail", "call", or "conference". |
| fromRole | String | The role of the caller. It can be "ADMIN"(Administrator), "SUPERVISOR"(Supervisor) or "AGENT"(Agent). |
| toRole | String | The role of the caller. It can be "ADMIN"(Administrator), "SUPERVISOR"(Supervisor) or "AGENT"(Agent). |
| fromRoleName | String | The role name of the caller. |
| toRoleName | String | The role name of the callee (aka called party/receiver). |
| fromDepartment | String | The caller's department. |
| toDepartment | String | The callee's (aka called party/receiver) department. |
| fromDisplayName | String | The display name of the caller. |
| toDisplayName | String | The display name of the callee (aka called party/receiver). |
| lastHandledParty | String | The staff handled the call until it ended. The staff represents with the Staff ID. |
| fromDepartmentID | String | The ID of the caller's department. |
| toDepartmentID | String | The ID of the callee's (aka called party/receiver) department. |
| callerFirstName | String | The first name of the caller. |
| callerLastName | String | The last name of the caller. |
| calleeFirstName | String | The first name of the callee (aka called party/receiver). |
| calleeLastName | String | The last name of the callee (aka called party/receiver). |
appID string required
App ID
callType string
The type of the call. It can be onnet, offnet or smartcall. An empty value indicates the response will include call details of all call types.status string
The status of the call record. Please refer to our Call Status and Bye Reason page.startAt string
The start date and time of the call. The value must be in RFC3339 format, e.g. 2022-11-07T00:00:00.000Z.endAt string
The end date and time of the call. The value must be in RFC3339 format, e.g. 2022-11-08T00:00:00.000Z.offset int32 Defaults to 0
Skip the number of the shown data in the response. If the offset value is 10, the first 10 data will be skipped. The default value is 0.limit int32
The number of data that will be returned, e.g. if the set limit is 10, 10 records returned in the response. The maximum value is 500.
Content-Type string
application/jsonAuthorization string
Bearer AppToken
200
Response body
json400
Response body
object
code integer Defaults to 0
message string
LANGUAGE: Shell
curl --request GET \
--url 'https://examplebaseurl.com/v1/api/apps/appID/data/call-detail?offset=0' \
--header 'Authorization: Bearer AppToken' \
--header 'Content-Type: application/json' \
--header 'accept: application/json'
$ brew install httpie
http GET 'https://examplebaseurl.com/v1/api/apps/appID/data/call-detail?offset=0' \
Authorization:'Bearer AppToken' \
Content-Type:application/json \
accept:application/json
LANGUAGE: Node
$ npm install axios --save
import axios from 'axios';
const options = {
method: 'GET',
url: 'https://examplebaseurl.com/v1/api/apps/appID/data/call-detail?offset=0',
headers: {
accept: 'application/json',
'Content-Type': 'application/json',
Authorization: 'Bearer AppToken'
}
};
axios
.request(options)
.then(res => console.log(res.data))
.catch(err => console.error(err));
const url = 'https://examplebaseurl.com/v1/api/apps/appID/data/call-detail?offset=0';
const options = {
method: 'GET',
headers: {
accept: 'application/json',
'Content-Type': 'application/json',
Authorization: 'Bearer AppToken'
}
};
fetch(url, options)
.then(res => res.json())
.then(json => console.log(json))
.catch(err => console.error(err));
const http = require('https');
const options = {
method: 'GET',
hostname: 'examplebaseurl.com',
port: null,
path: '/v1/api/apps/appID/data/call-detail?offset=0',
headers: {
accept: 'application/json',
'Content-Type': 'application/json',
Authorization: 'Bearer AppToken'
}
};
const req = http.request(options, function (res) {
const chunks = [];
res.on('data', function (chunk) {
chunks.push(chunk);
});
res.on('end', function () {
const body = Buffer.concat(chunks);
console.log(body.toString());
});
});
req.end();
$ npx api install "@cinnox2021/v7.3#45i1wk2km9l1e4hf"
import cinnox2021 from '@api/cinnox2021';
cinnox2021.getCallDetail({offset: '0', appID: 'appID', Authorization: 'Bearer AppToken'})
.then(({ data }) => console.log(data))
.catch(err => console.error(err));
LANGUAGE: Ruby
require 'uri'
require 'net/http'
url = URI("https://examplebaseurl.com/v1/api/apps/appID/data/call-detail?offset=0")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["accept"] = 'application/json'
request["Content-Type"] = 'application/json'
request["Authorization"] = 'Bearer AppToken'
response = http.request(request)
puts response.read_body
LANGUAGE: PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://examplebaseurl.com/v1/api/apps/appID/data/call-detail?offset=0",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer AppToken",
"Content-Type: application/json",
"accept: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}
$ composer require guzzlehttp/guzzle
<?php
require_once('vendor/autoload.php');
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://examplebaseurl.com/v1/api/apps/appID/data/call-detail?offset=0', [
'headers' => [
'Authorization' => 'Bearer AppToken',
'Content-Type' => 'application/json',
'accept' => 'application/json',
],
]);
echo $response->getBody();
LANGUAGE: Python
$ python -m pip install requests
import requests
url = "https://examplebaseurl.com/v1/api/apps/appID/data/call-detail?offset=0"
headers = {
"accept": "application/json",
"Content-Type": "application/json",
"Authorization": "Bearer AppToken"
}
response = requests.get(url, headers=headers)
print(response.text)
LANGUAGE: C
CURL *hnd = curl_easy_init();
curl_easy_setopt(hnd, CURLOPT_CUSTOMREQUEST, "GET");
curl_easy_setopt(hnd, CURLOPT_WRITEDATA, stdout);
curl_easy_setopt(hnd, CURLOPT_URL, "https://examplebaseurl.com/v1/api/apps/appID/data/call-detail?offset=0");
struct curl_slist *headers = NULL;
headers = curl_slist_append(headers, "accept: application/json");
headers = curl_slist_append(headers, "Content-Type: application/json");
headers = curl_slist_append(headers, "Authorization: Bearer AppToken");
curl_easy_setopt(hnd, CURLOPT_HTTPHEADER, headers);
CURLcode ret = curl_easy_perform(hnd);
LANGUAGE: C#
using System.Net.Http.Headers;
var client = new HttpClient();
var request = new HttpRequestMessage
{
Method = HttpMethod.Get,
RequestUri = new Uri("https://examplebaseurl.com/v1/api/apps/appID/data/call-detail?offset=0"),
Headers =
{
{ "accept", "application/json" },
{ "Authorization", "Bearer AppToken" },
},
};
using (var response = await client.SendAsync(request))
{
response.EnsureSuccessStatusCode();
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
}
$ dotnet add package RestSharp
using RestSharp;
var options = new RestClientOptions("https://examplebaseurl.com/v1/api/apps/appID/data/call-detail?offset=0");
var client = new RestClient(options);
var request = new RestRequest("");
request.AddHeader("accept", "application/json");
request.AddHeader("Content-Type", "application/json");
request.AddHeader("Authorization", "Bearer AppToken");
var response = await client.GetAsync(request);
Console.WriteLine("{0}", response.Content);
LANGUAGE: C++
CURL *hnd = curl_easy_init();
curl_easy_setopt(hnd, CURLOPT_CUSTOMREQUEST, "GET");
curl_easy_setopt(hnd, CURLOPT_WRITEDATA, stdout);
curl_easy_setopt(hnd, CURLOPT_URL, "https://examplebaseurl.com/v1/api/apps/appID/data/call-detail?offset=0");
struct curl_slist *headers = NULL;
headers = curl_slist_append(headers, "accept: application/json");
headers = curl_slist_append(headers, "Content-Type: application/json");
headers = curl_slist_append(headers, "Authorization: Bearer AppToken");
curl_easy_setopt(hnd, CURLOPT_HTTPHEADER, headers);
CURLcode ret = curl_easy_perform(hnd);
LANGUAGE: Clojure
(require '[clj-http.client :as client])
(client/get "https://examplebaseurl.com/v1/api/apps/appID/data/call-detail" {:headers {:Content-Type "application/json"
:Authorization "Bearer AppToken"}
:query-params {:offset "0"}
:accept :json})
LANGUAGE: Go
package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://examplebaseurl.com/v1/api/apps/appID/data/call-detail?offset=0"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("accept", "application/json")
req.Header.Add("Content-Type", "application/json")
req.Header.Add("Authorization", "Bearer AppToken")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}
LANGUAGE: HTTP
GET /v1/api/apps/appID/data/call-detail?offset=0 HTTP/1.1
Accept: application/json
Content-Type: application/json
Authorization: Bearer AppToken
Host: examplebaseurl.com
LANGUAGE: Java
AsyncHttpClient client = new DefaultAsyncHttpClient();
client.prepare("GET", "https://examplebaseurl.com/v1/api/apps/appID/data/call-detail?offset=0")
.setHeader("accept", "application/json")
.setHeader("Content-Type", "application/json")
.setHeader("Authorization", "Bearer AppToken")
.execute()
.toCompletableFuture()
.thenAccept(System.out::println)
.join();
client.close();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://examplebaseurl.com/v1/api/apps/appID/data/call-detail?offset=0"))
.header("accept", "application/json")
.header("Content-Type", "application/json")
.header("Authorization", "Bearer AppToken")
.method("GET", HttpRequest.BodyPublishers.noBody())
.build();
HttpResponse<String> response = HttpClient.newHttpClient().send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.url("https://examplebaseurl.com/v1/api/apps/appID/data/call-detail?offset=0")
.get()
.addHeader("accept", "application/json")
.addHeader("Content-Type", "application/json")
.addHeader("Authorization", "Bearer AppToken")
.build();
Response response = client.newCall(request).execute();
HttpResponse<String> response = Unirest.get("https://examplebaseurl.com/v1/api/apps/appID/data/call-detail?offset=0")
.header("accept", "application/json")
.header("Content-Type", "application/json")
.header("Authorization", "Bearer AppToken")
.asString();
LANGUAGE: JavaScript
$ npm install axios --save
import axios from 'axios';
const options = {
method: 'GET',
url: 'https://examplebaseurl.com/v1/api/apps/appID/data/call-detail',
params: {offset: '0'},
headers: {
accept: 'application/json',
'Content-Type': 'application/json',
Authorization: 'Bearer AppToken'
}
};
axios
.request(options)
.then(res => console.log(res.data))
.catch(err => console.error(err));
const options = {
method: 'GET',
headers: {
accept: 'application/json',
'Content-Type': 'application/json',
Authorization: 'Bearer AppToken'
}
};
fetch('https://examplebaseurl.com/v1/api/apps/appID/data/call-detail?offset=0', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));
const settings = {
async: true,
crossDomain: true,
url: 'https://examplebaseurl.com/v1/api/apps/appID/data/call-detail?offset=0',
method: 'GET',
headers: {
accept: 'application/json',
'Content-Type': 'application/json',
Authorization: 'Bearer AppToken'
}
};
$.ajax(settings).done(res => {
console.log(res);
});
const data = null;
const xhr = new XMLHttpRequest();
xhr.withCredentials = true;
xhr.addEventListener('readystatechange', function () {
if (this.readyState === this.DONE) {
console.log(this.responseText);
}
});
xhr.open('GET', 'https://examplebaseurl.com/v1/api/apps/appID/data/call-detail?offset=0');
xhr.setRequestHeader('accept', 'application/json');
xhr.setRequestHeader('Content-Type', 'application/json');
xhr.setRequestHeader('Authorization', 'Bearer AppToken');
xhr.send(data);
LANGUAGE: JSON
No JSON body
LANGUAGE: Kotlin
val client = OkHttpClient()
val request = Request.Builder()
.url("https://examplebaseurl.com/v1/api/apps/appID/data/call-detail?offset=0")
.get()
.addHeader("accept", "application/json")
.addHeader("Content-Type", "application/json")
.addHeader("Authorization", "Bearer AppToken")
.build()
val response = client.newCall(request).execute()
LANGUAGE: Objectve-C
#import <Foundation/Foundation.h>
NSDictionary *headers = @{ @"accept": @"application/json",
@"Content-Type": @"application/json",
@"Authorization": @"Bearer AppToken" };
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"https://examplebaseurl.com/v1/api/apps/appID/data/call-detail?offset=0"]
cachePolicy:NSURLRequestUseProtocolCachePolicy
timeoutInterval:10.0];
[request setHTTPMethod:@"GET"];
[request setAllHTTPHeaderFields:headers];
NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request
completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
if (error) {
NSLog(@"%@", error);
} else {
NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *) response;
NSLog(@"%@", httpResponse);
}
}];
[dataTask resume];
LANGUAGE: OCaml
$ opam install cohttp-lwt-unix cohttp-async
open Cohttp_lwt_unix
open Cohttp
open Lwt
let uri = Uri.of_string "https://examplebaseurl.com/v1/api/apps/appID/data/call-detail?offset=0" in
let headers = Header.add_list (Header.init ()) [
("accept", "application/json");
("Content-Type", "application/json");
("Authorization", "Bearer AppToken");
] in
Client.call ~headers `GET uri
>>= fun (res, body_stream) ->
(* Do stuff with the result *)
LANGUAGE: PowerShell
$headers=@{}
$headers.Add("accept", "application/json")
$headers.Add("Content-Type", "application/json")
$headers.Add("Authorization", "Bearer AppToken")
$response = Invoke-RestMethod -Uri 'https://examplebaseurl.com/v1/api/apps/appID/data/call-detail?offset=0' -Method GET -Headers $headers
$headers=@{}
$headers.Add("accept", "application/json")
$headers.Add("Content-Type", "application/json")
$headers.Add("Authorization", "Bearer AppToken")
$response = Invoke-WebRequest -Uri 'https://examplebaseurl.com/v1/api/apps/appID/data/call-detail?offset=0' -Method GET -Headers $headers
LANGUAGE: R
library(httr)
url <- "https://examplebaseurl.com/v1/api/apps/appID/data/call-detail"
queryString <- list(offset = "0")
response <- VERB("GET", url, query = queryString, add_headers('Authorization' = 'Bearer AppToken'), content_type("application/octet-stream"), accept("application/json"))
content(response, "text")
LANGUAGE: Swift
import Foundation
let url = URL(string: "https://examplebaseurl.com/v1/api/apps/appID/data/call-detail")!
var components = URLComponents(url: url, resolvingAgainstBaseURL: true)!
let queryItems: [URLQueryItem] = [
URLQueryItem(name: "offset", value: "0"),
]
components.queryItems = components.queryItems.map { $0 + queryItems } ?? queryItems
var request = URLRequest(url: components.url!)
request.httpMethod = "GET"
request.timeoutInterval = 10
request.allHTTPHeaderFields = [
"accept": "application/json",
"Content-Type": "application/json",
"Authorization": "Bearer AppToken"
]
let (data, _) = try await URLSession.shared.data(for: request)
print(String(decoding: data, as: UTF8.self))
RESPONSE: 200-Result
{
"code": number,
"result": [
{
"id": "string",
"hid": "string",
"svcID": "string",
"date": "string",
"roomID": "string",
"seq": number,
"type": "string",
"fromEID": "string",
"toEID": "string",
"fromSvcID": "string",
"toSvcID": "string",
"fromRegion": "string",
"callSeq": number,
"callID": "string",
"callDirection": "string",
"callType": "string",
"fromIP": "string",
"callPrepareFromNum": "string",
"caller": "string",
"callee": "string",
"callDate": "string",
"callEndTime": "string",
"status": "string",
"lastResponseCode": "string",
"byeReason": "string",
"releaseParty": "string",
"mediaType": "string",
"isRecording": Boolean,
"hasAudioFile": Boolean,
"recordingEventList": [
{
"recorderEID": "string",
"startAt": "string",
"endAt": "string",
"files": [
{
"id": "string",
"name": "string",
"downloadUrl": "string",
"duration": number,
"mimeType": "string",
"size": number,
"type": "string",
"isPrivate": Boolean
}
],
"code": 0
}
],
"recordType": "string",
"fromRole": "string",
"toRole": "string",
"fromRoleName": "string",
"toRoleName": "string",
"fromDepartment": "string",
"toDepartment": "string",
"fromDisplayName": "string",
"toDisplayName": "string",
"lastHandledParty": "string",
"fromDepartmentID": "string",
"toDepartmentID": "string",
"callerFirstName": "string",
"callerLastName": "string",
"calleeFirstName": "string",
"calleeLastName": "string"
}
]
}
RESPONSE: 400-Result
{
"code": 0,
"message": "The error message from the server. Please refer to the error table."
}