curl --request GET \
--url https://n-api.leadstaker.com/v1/contacts/{contactId}/calls \
--header 'x-api-key: <api-key>'import requests
url = "https://n-api.leadstaker.com/v1/contacts/{contactId}/calls"
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://n-api.leadstaker.com/v1/contacts/{contactId}/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://n-api.leadstaker.com/v1/contacts/{contactId}/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 => [
"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://n-api.leadstaker.com/v1/contacts/{contactId}/calls"
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://n-api.leadstaker.com/v1/contacts/{contactId}/calls")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://n-api.leadstaker.com/v1/contacts/{contactId}/calls")
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[
{
"id": "6abd10c5812811e995a28f1f",
"projectId": "665f1c2e8a94b70012d4e9a1",
"entityId": "6715be3a9c40aa0013d8e5c2",
"entityType": "DEAL",
"provider": "API4COM",
"externalId": "1759236412.4821",
"direction": "OUTBOUND",
"from": {
"type": "EXTENSION",
"number": "1000",
"userId": "664d9e0b7c83aa0010f1c2d3"
},
"to": {
"type": "PHONE",
"number": "5548999998888"
},
"startedAt": "2026-09-30T13:40:02.000Z",
"answeredAt": "2026-09-30T13:40:11.000Z",
"endedAt": "2026-09-30T13:42:34.000Z",
"durationInSeconds": 143,
"outcome": "ANSWERED",
"recording": {
"status": "STORED",
"mimeType": "audio/mpeg"
},
"transcription": {
"status": "DONE",
"text": "Oi João, tudo bem? Vi que a proposta de 10 mil ficou com você.\nTudo, gostei dos 10 mil. Me retorna amanhã?",
"turns": [
{
"speaker": "SELLER",
"start": 1.4,
"text": "Oi João, tudo bem? Vi que a proposta de 10 mil ficou com você."
},
{
"speaker": "CUSTOMER",
"start": 9.2,
"text": "Tudo, gostei dos 10 mil. Me retorna amanhã?"
}
]
},
"analysis": {
"status": "DONE",
"summary": "João aceitou a proposta de R$ 10 mil e pediu retorno amanhã para fechar."
},
"createdAt": "2026-09-30T13:42:40.000Z",
"updatedAt": "2026-09-30T13:43:15.000Z"
}
]{
"errorCode": "<string>",
"message": "<string>",
"status": 123,
"errors": [
{
"field": "<string>",
"code": "<string>",
"message": "<string>"
}
]
}{
"errorCode": "<string>",
"message": "<string>",
"status": 123,
"errors": [
{
"field": "<string>",
"code": "<string>",
"message": "<string>"
}
]
}{
"errorCode": "<string>",
"message": "<string>",
"status": 123,
"errors": [
{
"field": "<string>",
"code": "<string>",
"message": "<string>"
}
]
}List the calls of a contact
Answers with a bare array of calls, newest first, without an envelope or pagination fields. A call is stored once it ends, with its recording copied a few seconds later. Answered calls up to one hour are transcribed on their own; each transcription is followed by an AI summary in analysis. That analysis also writes what the call said into the fields of the deal and the contact, filled ones included, so a call can raise the same update events and webhooks as any other edit. Includes the calls attached to the contact and to the deals of the contact the caller can see.
curl --request GET \
--url https://n-api.leadstaker.com/v1/contacts/{contactId}/calls \
--header 'x-api-key: <api-key>'import requests
url = "https://n-api.leadstaker.com/v1/contacts/{contactId}/calls"
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://n-api.leadstaker.com/v1/contacts/{contactId}/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://n-api.leadstaker.com/v1/contacts/{contactId}/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 => [
"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://n-api.leadstaker.com/v1/contacts/{contactId}/calls"
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://n-api.leadstaker.com/v1/contacts/{contactId}/calls")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://n-api.leadstaker.com/v1/contacts/{contactId}/calls")
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[
{
"id": "6abd10c5812811e995a28f1f",
"projectId": "665f1c2e8a94b70012d4e9a1",
"entityId": "6715be3a9c40aa0013d8e5c2",
"entityType": "DEAL",
"provider": "API4COM",
"externalId": "1759236412.4821",
"direction": "OUTBOUND",
"from": {
"type": "EXTENSION",
"number": "1000",
"userId": "664d9e0b7c83aa0010f1c2d3"
},
"to": {
"type": "PHONE",
"number": "5548999998888"
},
"startedAt": "2026-09-30T13:40:02.000Z",
"answeredAt": "2026-09-30T13:40:11.000Z",
"endedAt": "2026-09-30T13:42:34.000Z",
"durationInSeconds": 143,
"outcome": "ANSWERED",
"recording": {
"status": "STORED",
"mimeType": "audio/mpeg"
},
"transcription": {
"status": "DONE",
"text": "Oi João, tudo bem? Vi que a proposta de 10 mil ficou com você.\nTudo, gostei dos 10 mil. Me retorna amanhã?",
"turns": [
{
"speaker": "SELLER",
"start": 1.4,
"text": "Oi João, tudo bem? Vi que a proposta de 10 mil ficou com você."
},
{
"speaker": "CUSTOMER",
"start": 9.2,
"text": "Tudo, gostei dos 10 mil. Me retorna amanhã?"
}
]
},
"analysis": {
"status": "DONE",
"summary": "João aceitou a proposta de R$ 10 mil e pediu retorno amanhã para fechar."
},
"createdAt": "2026-09-30T13:42:40.000Z",
"updatedAt": "2026-09-30T13:43:15.000Z"
}
]{
"errorCode": "<string>",
"message": "<string>",
"status": 123,
"errors": [
{
"field": "<string>",
"code": "<string>",
"message": "<string>"
}
]
}{
"errorCode": "<string>",
"message": "<string>",
"status": 123,
"errors": [
{
"field": "<string>",
"code": "<string>",
"message": "<string>"
}
]
}{
"errorCode": "<string>",
"message": "<string>",
"status": 123,
"errors": [
{
"field": "<string>",
"code": "<string>",
"message": "<string>"
}
]
}Authorizations
Path Parameters
1Query Parameters
How many calls to return, at most 50. Defaults to 20.
1 <= x <= 50How many calls to skip.
x >= 0Response
Success
11The deal the call is attached to, or the contact when it has no deal.
1DEAL, CONTACT API4COM The call id on the telephony provider.
1OUTBOUND, INBOUND - Option 1
- Option 2
Show child attributes
Show child attributes
- Option 1
- Option 2
Show child attributes
Show child attributes
Talk time, from the answer to the hang up.
ANSWERED, NO_ANSWER, BUSY, VOICEMAIL, FAILED Show child attributes
Show child attributes
Null while there is no stored recording.
Show child attributes
Show child attributes
The AI summary, written after each transcription; null before the first one.
Show child attributes
Show child attributes