cURL
curl --request GET \
--url https://api.finosu.com/calls/customer/{customerId} \
--header 'X-API-Key: <api-key>'import requests
url = "https://api.finosu.com/calls/customer/{customerId}"
headers = {"X-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-Key': '<api-key>'}};
fetch('https://api.finosu.com/calls/customer/{customerId}', 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.finosu.com/calls/customer/{customerId}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-API-Key: <api-key>"
],
]);
$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.finosu.com/calls/customer/{customerId}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-Key", "<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://api.finosu.com/calls/customer/{customerId}")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.finosu.com/calls/customer/{customerId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body[
{
"customerId": "<string>",
"toPhoneNumber": "<string>",
"transcript": "<string>",
"recordingUrl": "<string>",
"timestamp": "<string>"
}
]{
"detail": "<string>"
}{
"detail": "<string>"
}{
"detail": "<string>"
}Calls
List Calls for a Customer
Returns a customer’s calls from the last 30 days, newest first. For older history use GET /calls.
GET
/
calls
/
customer
/
{customerId}
cURL
curl --request GET \
--url https://api.finosu.com/calls/customer/{customerId} \
--header 'X-API-Key: <api-key>'import requests
url = "https://api.finosu.com/calls/customer/{customerId}"
headers = {"X-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-Key': '<api-key>'}};
fetch('https://api.finosu.com/calls/customer/{customerId}', 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.finosu.com/calls/customer/{customerId}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-API-Key: <api-key>"
],
]);
$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.finosu.com/calls/customer/{customerId}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-Key", "<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://api.finosu.com/calls/customer/{customerId}")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.finosu.com/calls/customer/{customerId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body[
{
"customerId": "<string>",
"toPhoneNumber": "<string>",
"transcript": "<string>",
"recordingUrl": "<string>",
"timestamp": "<string>"
}
]{
"detail": "<string>"
}{
"detail": "<string>"
}{
"detail": "<string>"
}Returns one customer’s recent calls as a plain JSON array, ordered newest first by creation time. An empty history returns
Errors use FastAPI’s
[].
customerId is your external customer reference — the same identifier accepted by the customerId filter on List All Calls and by the Scheduled Calls customer routes — not a Finosu call or customer UUID. An unknown reference, or a deleted customer, returns 404.
Scope
The response covers only calls created in the last 30 days. Deleted calls and dial attempts that never progressed past the initial attempted state are excluded. For the full history, including older calls and unconnected attempts, use List All Calls, which has no date cutoff.Pagination
limit (1–1000) and offset (default 0) slice the newest-first list; omit limit to return every call in the 30-day window. There is no cursor, so calls created between requests shift offsets. Values outside these ranges return 422.
Response fields
Each item has the same shape as Retrieve a Call:customerId echoes your external reference, falling back to the Finosu customer UUID when no reference is stored. timestamp is the call record’s creation time in ISO 8601. recordingUrl is a fresh link valid for one hour, or null when the call has no recording or recording storage is temporarily unavailable. Unlike the bulk listing, recording links are included per item, so large pages respond more slowly.
Errors
| Status | Meaning |
|---|---|
401 | Missing, invalid, inactive, deleted, or empty API key. |
404 | No customer with that reference in your company. |
422 | limit or offset outside the allowed range. |
500 | Unexpected internal error. |
detail field: a string for 404, an array of field errors for 422.Query Parameters
Response
Calls response