Get External Call
curl --request GET \
--url https://api.usesimple.ai/api/v1/external_calls/{uuid} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.usesimple.ai/api/v1/external_calls/{uuid}"
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/{uuid}', 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/{uuid}",
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/{uuid}"
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/{uuid}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.usesimple.ai/api/v1/external_calls/{uuid}")
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{
"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>"
],
"recordings": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"file_name": "<string>",
"status": "pending",
"started_at": "2023-11-07T05:31:56Z",
"transcript": [
{
"speaker": "<string>",
"text": "<string>",
"start": 123,
"end": 123,
"confidence": 123,
"channel": "<string>"
}
],
"summary": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z"
}
]
}{
"status": "error",
"success": false,
"error": "<string>",
"errors": [
"<string>"
]
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>"
}
]
}Get an External Call Recording with the API
Retrieve an external call session and its chronological recording legs, including transcripts and summaries when processing completes.
GET
/
external_calls
/
{uuid}
Get External Call
curl --request GET \
--url https://api.usesimple.ai/api/v1/external_calls/{uuid} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.usesimple.ai/api/v1/external_calls/{uuid}"
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/{uuid}', 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/{uuid}",
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/{uuid}"
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/{uuid}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.usesimple.ai/api/v1/external_calls/{uuid}")
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{
"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>"
],
"recordings": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"file_name": "<string>",
"status": "pending",
"started_at": "2023-11-07T05:31:56Z",
"transcript": [
{
"speaker": "<string>",
"text": "<string>",
"start": 123,
"end": 123,
"confidence": 123,
"channel": "<string>"
}
],
"summary": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z"
}
]
}{
"status": "error",
"success": false,
"error": "<string>",
"errors": [
"<string>"
]
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>"
}
]
}Returns the session-level call data plus each visible recording leg in chronological order. Transcripts and summaries are
null while processing is incomplete.
recording_presigned_urls contains a URL for every playable recording in the session, in chronological order. URLs expire after one hour. Recordings awaiting required audio redaction are omitted until they are playable. If URL signing temporarily fails for a recording, its URL is omitted and the call data is still returned. The array is empty when no recording URLs are available.
Learn how Simple AI represents call data in the AI phone calls guide.
Recording links in recording_presigned_urls are temporary HTTPS playback URLs. Use each complete URL as returned, including its query parameters; the hostname and URL structure may change. Anyone with a valid link can access its recording until the link expires.Authorizations
Your API key, sent as Authorization: Bearer YOUR_API_KEY
Path Parameters
Response
External call returned
Available options:
inbound, outbound Available options:
processing, transcribed, error Required range:
x >= 0Show child attributes
Show child attributes
Presigned URLs for all playable recordings in chronological order. External calls can have multiple recordings per session. URLs expire after one hour. Deleted, excluded, and recordings awaiting required audio redaction are omitted; an empty array means no recordings are currently playable. If URL signing fails for a recording, its URL is omitted and the call data is still returned.
Show child attributes
Show child attributes
Last modified on October 3, 2026