Calls
Call Detail Records (CDR)
Fetch telephony call detail records with filtering and pagination
GET
/
api
/
v2
/
platform
/
cdr
/
Get Call Detail Records
curl --request GET \
--url https://unpod.ai/api/v2/platform/cdr/ \
--header 'Authorization: <api-key>' \
--header 'Org-Handle: <org-handle>'import requests
url = "https://unpod.ai/api/v2/platform/cdr/"
headers = {
"Org-Handle": "<org-handle>",
"Authorization": "<api-key>"
}
response = requests.get(url, headers=headers)
print(response.text)const options = {
method: 'GET',
headers: {'Org-Handle': '<org-handle>', Authorization: '<api-key>'}
};
fetch('https://unpod.ai/api/v2/platform/cdr/', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://unpod.ai/api/v2/platform/cdr/",
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: <api-key>",
"Org-Handle: <org-handle>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://unpod.ai/api/v2/platform/cdr/"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Org-Handle", "<org-handle>")
req.Header.Add("Authorization", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://unpod.ai/api/v2/platform/cdr/")
.header("Org-Handle", "<org-handle>")
.header("Authorization", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://unpod.ai/api/v2/platform/cdr/")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Org-Handle"] = '<org-handle>'
request["Authorization"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"count": 643,
"status_code": 200,
"message": "Call logs fetched successfully",
"data": [
{
"id": 33364,
"call_status": "completed",
"end_reason": "call.in-progress.sip-completed-call",
"call_type": "outbound",
"bridge": { "id": 12, "name": "Acme Primary Bridge" },
"creation_time": "2025-11-08T05:32:29Z",
"start_time": "2025-11-08T05:29:43Z",
"end_time": "2025-11-08T05:32:28.686639Z",
"call_duration": 165.686639,
"source_number": "+15551234567",
"destination_number": "+15559876543",
"failure_source": null,
"sip_cause": null
}
]
}
Fetch telephony call detail records (CDR) for your organization - inbound and
outbound SIP calls with status, timing, duration, and end reason.
Prerequisites: API Token + Org-Handle. See Authentication.
Headers
| Name | Type | Required | Description |
|---|---|---|---|
| Authorization | string | Yes | Token <your-api-key> |
| Org-Handle | string | Yes | Organization domain handle |
Query parameters
| Name | Type | Description |
|---|---|---|
| page | integer | Page number (default 1) |
| page_size | integer | Rows per page (default 20) |
| call_type | string | inbound or outbound |
| call_status | string | completed, notConnected, or failed |
{
"count": 643,
"status_code": 200,
"message": "Call logs fetched successfully",
"data": [
{
"id": 33364,
"call_status": "completed",
"end_reason": "call.in-progress.sip-completed-call",
"call_type": "outbound",
"bridge": { "id": 12, "name": "Acme Primary Bridge" },
"creation_time": "2025-11-08T05:32:29Z",
"start_time": "2025-11-08T05:29:43Z",
"end_time": "2025-11-08T05:32:28.686639Z",
"call_duration": 165.686639,
"source_number": "+15551234567",
"destination_number": "+15559876543",
"failure_source": null,
"sip_cause": null
}
]
}
cURL
curl -s "https://unpod.ai/api/v2/platform/cdr/?page_size=5" \
-H "Authorization: Token <your-api-key>" \
-H "Org-Handle: <your-org-handle>"
Authorizations
Format: Token
Headers
Organization domain handle
Example:
"unpod.tv"
Query Parameters
Example:
1
Example:
20
Available options:
inbound, outbound Example:
"outbound"
Available options:
completed, notConnected, failed Example:
"completed"
Response
List of telephony CDRs
Was this page helpful?
⌘I
Get Call Detail Records
curl --request GET \
--url https://unpod.ai/api/v2/platform/cdr/ \
--header 'Authorization: <api-key>' \
--header 'Org-Handle: <org-handle>'import requests
url = "https://unpod.ai/api/v2/platform/cdr/"
headers = {
"Org-Handle": "<org-handle>",
"Authorization": "<api-key>"
}
response = requests.get(url, headers=headers)
print(response.text)const options = {
method: 'GET',
headers: {'Org-Handle': '<org-handle>', Authorization: '<api-key>'}
};
fetch('https://unpod.ai/api/v2/platform/cdr/', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://unpod.ai/api/v2/platform/cdr/",
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: <api-key>",
"Org-Handle: <org-handle>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://unpod.ai/api/v2/platform/cdr/"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Org-Handle", "<org-handle>")
req.Header.Add("Authorization", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://unpod.ai/api/v2/platform/cdr/")
.header("Org-Handle", "<org-handle>")
.header("Authorization", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://unpod.ai/api/v2/platform/cdr/")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Org-Handle"] = '<org-handle>'
request["Authorization"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"count": 643,
"status_code": 200,
"message": "Call logs fetched successfully",
"data": [
{
"id": 33364,
"call_status": "completed",
"end_reason": "call.in-progress.sip-completed-call",
"call_type": "outbound",
"bridge": { "id": 12, "name": "Acme Primary Bridge" },
"creation_time": "2025-11-08T05:32:29Z",
"start_time": "2025-11-08T05:29:43Z",
"end_time": "2025-11-08T05:32:28.686639Z",
"call_duration": 165.686639,
"source_number": "+15551234567",
"destination_number": "+15559876543",
"failure_source": null,
"sip_cause": null
}
]
}