List External Calls
curl --request GET \
--url https://api.usesimple.ai/api/v1/external_calls \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.usesimple.ai/api/v1/external_calls"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.usesimple.ai/api/v1/external_calls', 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://api.usesimple.ai/api/v1/external_calls",
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 <token>"
],
]);
$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://api.usesimple.ai/api/v1/external_calls"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.usesimple.ai/api/v1/external_calls")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.usesimple.ai/api/v1/external_calls")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"external_calls": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"external_call_id": "<string>",
"title": "<string>",
"direction": "inbound",
"from_number": "<string>",
"to_number": "<string>",
"duration_seconds": 123,
"started_at": "2023-11-07T05:31:56Z",
"status": "processing",
"recording_count": 1,
"source": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"provider": "<string>"
},
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"recording_presigned_urls": [
"<string>"
]
}
],
"total_count": 1,
"page": 2,
"page_size": 50,
"total_pages": 1
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>"
}
]
}List External Call Recordings with the API
List and paginate external call sessions, with filters for locating uploaded recordings and their processed call data.
GET
/
external_calls
List External Calls
curl --request GET \
--url https://api.usesimple.ai/api/v1/external_calls \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.usesimple.ai/api/v1/external_calls"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.usesimple.ai/api/v1/external_calls', 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://api.usesimple.ai/api/v1/external_calls",
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 <token>"
],
]);
$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://api.usesimple.ai/api/v1/external_calls"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.usesimple.ai/api/v1/external_calls")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.usesimple.ai/api/v1/external_calls")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"external_calls": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"external_call_id": "<string>",
"title": "<string>",
"direction": "inbound",
"from_number": "<string>",
"to_number": "<string>",
"duration_seconds": 123,
"started_at": "2023-11-07T05:31:56Z",
"status": "processing",
"recording_count": 1,
"source": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"provider": "<string>"
},
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"recording_presigned_urls": [
"<string>"
]
}
],
"total_count": 1,
"page": 2,
"page_size": 50,
"total_pages": 1
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>"
}
]
}Each item represents one external call session. A session may contain multiple recording legs when a provider splits a call around holds or transfers.
Learn how Simple AI represents call data in the AI phone calls guide.
The
started_at field is the earliest visible recording-leg start. Date filters apply to that value rather than the time the recording was imported.Authorizations
Your API key, sent as Authorization: Bearer YOUR_API_KEY
Query Parameters
Required range:
x >= 1Required range:
1 <= x <= 100Available options:
processing, transcribed, error Return calls that started at or after this ISO 8601 timestamp.
Return calls that started at or before this ISO 8601 timestamp.
Return calls last updated at or after this ISO 8601 timestamp (inclusive).
Return calls last updated at or before this ISO 8601 timestamp (inclusive).
Response
External calls returned
Last modified on September 3, 2026