curl --request GET \
--url https://api.instantly.ai/api/v2/ai-agents/sales/{id}/leads/activity \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.instantly.ai/api/v2/ai-agents/sales/{id}/leads/activity"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.instantly.ai/api/v2/ai-agents/sales/{id}/leads/activity', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));HttpResponse<String> response = Unirest.get("https://api.instantly.ai/api/v2/ai-agents/sales/{id}/leads/activity")
.header("Authorization", "Bearer <token>")
.asString();<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.instantly.ai/api/v2/ai-agents/sales/{id}/leads/activity",
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.instantly.ai/api/v2/ai-agents/sales/{id}/leads/activity"
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))
}{
"items": [
{
"email": "lead@example.com",
"emails_sent": 3,
"open_count": 5,
"replied": true,
"reply_count": 1,
"click_count": 2,
"bounced": false,
"has_opportunity": true,
"lt_interest_status": 1
}
],
"total": 250,
"next_starting_after": "lead@example.com"
}{
"statusCode": 400,
"error": "Bad Request",
"message": "body must have required property 'name'"
}{
"statusCode": 401,
"error": "Unauthorized",
"message": "Missing Authorization header"
}{
"statusCode": 402,
"error": "Payment Required",
"message": "Workspace does not have an active paid plan"
}{
"statusCode": 404,
"error": "Not Found",
"message": "Resource not found"
}{
"statusCode": 429,
"error": "Too Many Requests",
"message": "Rate limit exceeded"
}List AI Sales Agent lead activity
Get per-lead event history (emails sent, opens, replies, clicks, bounces, opportunity status) for all campaigns of the AI Sales Agent. Leads are ordered by email ascending and paginated with a cursor. When start_date and end_date are omitted, the response covers all-time data.
Requires one of the following scopes: ai_sdr:read, ai_sdr:all, all:read, all:all
curl --request GET \
--url https://api.instantly.ai/api/v2/ai-agents/sales/{id}/leads/activity \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.instantly.ai/api/v2/ai-agents/sales/{id}/leads/activity"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.instantly.ai/api/v2/ai-agents/sales/{id}/leads/activity', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));HttpResponse<String> response = Unirest.get("https://api.instantly.ai/api/v2/ai-agents/sales/{id}/leads/activity")
.header("Authorization", "Bearer <token>")
.asString();<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.instantly.ai/api/v2/ai-agents/sales/{id}/leads/activity",
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.instantly.ai/api/v2/ai-agents/sales/{id}/leads/activity"
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))
}{
"items": [
{
"email": "lead@example.com",
"emails_sent": 3,
"open_count": 5,
"replied": true,
"reply_count": 1,
"click_count": 2,
"bounced": false,
"has_opportunity": true,
"lt_interest_status": 1
}
],
"total": 250,
"next_starting_after": "lead@example.com"
}{
"statusCode": 400,
"error": "Bad Request",
"message": "body must have required property 'name'"
}{
"statusCode": 401,
"error": "Unauthorized",
"message": "Missing Authorization header"
}{
"statusCode": 402,
"error": "Payment Required",
"message": "Workspace does not have an active paid plan"
}{
"statusCode": 404,
"error": "Not Found",
"message": "Resource not found"
}{
"statusCode": 429,
"error": "Too Many Requests",
"message": "Rate limit exceeded"
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Path Parameters
AI Sales Agent ID
"01a08b36-b277-7624-9f8a-290035be2eba"
Query Parameters
Start date filter (ISO 8601). When omitted, results are not bounded by a start date (all-time data up to end_date).
"2026-09-10T12:06:52.791Z"
End date filter (ISO 8601). When omitted, results run up to the present.
"2026-09-10T12:06:52.791Z"
Optional filter for the lead set.
replied, has_opportunity "replied"
Number of leads to return (default 100)
1 <= x <= 100100
The email of the last lead in the previous page - used for pagination. You can use the value of the next_starting_after field from the previous response.
"lead@example.com"
Response
Per-lead activity data with cursor pagination
The list of leads with activity
Show child attributes
Show child attributes
Total number of distinct leads with activity (after the filter is applied)
250
The filter for getting the next leads after this one. Omitted when there are no more leads.
"lead@example.com"