Menu

Get Call Details

GET `https://examplebaseURL.com/v1/api/apps/{appID}/data/call-detail

Response Format

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).

Path Params

appID string required
App ID

Query Params

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.

Headers

Content-Type string
application/json

Authorization string
Bearer AppToken

Responses

200
Response body
json

400
Response body
object
code integer Defaults to 0
message string

Language

LANGUAGE: Shell

Shell: cURL Request Copy
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'
Shell: HTTPie Request Copy
$ 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

Node: Axios Request Copy
$ 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));
Node: fetch Request Copy
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));
Node: http Request Copy
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();
Node: API Request Copy
$ 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

Request Copy
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 Request Copy
<?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;
}
PHP: Guzzle Request Copy
$ 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

Request Copy
$ 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

Request Copy
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#

C#: HttpClient Request Copy
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);
}
C#: RestSharp Request Copy
$ 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++

Request Copy
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

Request Copy
(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

Request Copy
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

Request Copy
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

Java: AsyncHttp Request Copy
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();
Java: java.net.http. Request Copy
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());
Java: OkHttp. Request Copy
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();
Java: Unirest Request Copy
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

JavaScript: Axios Request Copy
$ 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));
JavaScript: fetch Request Copy
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));
JavaScript: jQuery Request Copy
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);
});
JavaScript: XMLHttpRequest Request Copy
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

Request Copy
No JSON body

LANGUAGE: Kotlin

Request Copy
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

Request Copy
#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

Request Copy
$ 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

PowerShell: Invoke-RestMethod Request Copy
$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
PowerShell: Invoke-WebRequest Request Copy
$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

Request Copy
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

Request Copy
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

200-Result Copy
{
  "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 Example

RESPONSE: 400-Result

400-Result Copy
{
  "code": 0,
  "message": "The error message from the server. Please refer to the error table."
}
Last modified: 2025-12-11