Get a Call
curl --request GET \
--url https://api.lemlist.com/api/calls/{id} \
--header 'Authorization: Basic <encoded-value>'import requests
url = "https://api.lemlist.com/api/calls/{id}"
headers = {"Authorization": "Basic <encoded-value>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Basic <encoded-value>'}};
fetch('https://api.lemlist.com/api/calls/{id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));require 'uri'
require 'net/http'
url = URI("https://api.lemlist.com/api/calls/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Basic <encoded-value>'
response = http.request(request)
puts response.read_body<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.lemlist.com/api/calls/{id}",
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: Basic <encoded-value>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}{
"success": true,
"data": {
"_id": "act_Z8gP3xYq2bKd9mLn7",
"externalId": "trellus-8f2c1",
"contactId": "ctc_7Ks2PqW9mXb4Lc1Td",
"leadId": "lea_2Hn8VbQ4wRz6Ym3Jk",
"campaignId": "cam_5Fd9LpX2cVt7Nq8Wb",
"taskId": "opp_9Xw4RtY7kLm2Pq6Zc",
"userId": "usr_3Bv7GhT5nJk8Lm2Qx",
"direction": "outbound",
"from": "+33100000000",
"to": "+33612345678",
"startedAt": "2026-10-21T09:30:00.000Z",
"endedAt": "2026-10-21T09:30:45.000Z",
"duration": 45,
"callStatus": "left-voicemail",
"note": "Left a voicemail, call back Thursday.",
"phoneProvider": "api",
"provider": "trellus",
"hasRecording": true,
"hasTranscript": true,
"createdAt": "2026-10-21T09:30:00.000Z"
}
}{
"success": false,
"error": {
"code": "VALIDATION_ERROR",
"message": "Match error: Expected a valid id"
}
}{
"error": "Unauthorized"
}{
"success": false,
"error": {
"code": "CALLS_CALL_NOT_FOUND",
"message": "Call not found."
}
}{
"error": "Route bad method"
}{
"success": false,
"error": {
"code": "INTERNAL_ERROR",
"message": "Internal error"
}
}Calls
Get a Call
Reads a call of the team back, by its id or, for a call logged through the API, by the externalId you sent.
GET
/
calls
/
{id}
Get a Call
curl --request GET \
--url https://api.lemlist.com/api/calls/{id} \
--header 'Authorization: Basic <encoded-value>'import requests
url = "https://api.lemlist.com/api/calls/{id}"
headers = {"Authorization": "Basic <encoded-value>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Basic <encoded-value>'}};
fetch('https://api.lemlist.com/api/calls/{id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));require 'uri'
require 'net/http'
url = URI("https://api.lemlist.com/api/calls/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Basic <encoded-value>'
response = http.request(request)
puts response.read_body<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.lemlist.com/api/calls/{id}",
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: Basic <encoded-value>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}{
"success": true,
"data": {
"_id": "act_Z8gP3xYq2bKd9mLn7",
"externalId": "trellus-8f2c1",
"contactId": "ctc_7Ks2PqW9mXb4Lc1Td",
"leadId": "lea_2Hn8VbQ4wRz6Ym3Jk",
"campaignId": "cam_5Fd9LpX2cVt7Nq8Wb",
"taskId": "opp_9Xw4RtY7kLm2Pq6Zc",
"userId": "usr_3Bv7GhT5nJk8Lm2Qx",
"direction": "outbound",
"from": "+33100000000",
"to": "+33612345678",
"startedAt": "2026-10-21T09:30:00.000Z",
"endedAt": "2026-10-21T09:30:45.000Z",
"duration": 45,
"callStatus": "left-voicemail",
"note": "Left a voicemail, call back Thursday.",
"phoneProvider": "api",
"provider": "trellus",
"hasRecording": true,
"hasTranscript": true,
"createdAt": "2026-10-21T09:30:00.000Z"
}
}{
"success": false,
"error": {
"code": "VALIDATION_ERROR",
"message": "Match error: Expected a valid id"
}
}{
"error": "Unauthorized"
}{
"success": false,
"error": {
"code": "CALLS_CALL_NOT_FOUND",
"message": "Call not found."
}
}{
"error": "Route bad method"
}{
"success": false,
"error": {
"code": "INTERNAL_ERROR",
"message": "Internal error"
}
}Reach any call of the team by its
_id, whatever made it: the lemlist dialer, Aircall, Ringover or this API. A call logged through POST /calls is also reached by the externalId you sent; the other calls have none (externalId: null) and show the dialer that made them in phoneProvider.
Read a call back when you need to know whether its recording landed (hasRecording), what status and note it holds now, or when a POST answered nothing (a timeout, a network error): the call is stored under your externalId as soon as lemlist answered, and this reads it without logging it again.Authorizations
Basic authentication header of the form Basic <encoded-value>, where <encoded-value> is the base64-encoded string username:password.
Path Parameters
The call's _id (act_…) or its externalId.
Was this page helpful?