curl --request POST \
--url https://api.reply.io/v3/sequences/{id}/stats/linkedin \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"filters": {
"dateRangePreset": "lastMonth"
}
}
'import requests
url = "https://api.reply.io/v3/sequences/{id}/stats/linkedin"
payload = { "filters": { "dateRangePreset": "lastMonth" } }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({filters: {dateRangePreset: 'lastMonth'}})
};
fetch('https://api.reply.io/v3/sequences/{id}/stats/linkedin', 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.reply.io/v3/sequences/{id}/stats/linkedin",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'filters' => [
'dateRangePreset' => 'lastMonth'
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.reply.io/v3/sequences/{id}/stats/linkedin"
payload := strings.NewReader("{\n \"filters\": {\n \"dateRangePreset\": \"lastMonth\"\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.reply.io/v3/sequences/{id}/stats/linkedin")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"filters\": {\n \"dateRangePreset\": \"lastMonth\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.reply.io/v3/sequences/{id}/stats/linkedin")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"filters\": {\n \"dateRangePreset\": \"lastMonth\"\n }\n}"
response = http.request(request)
puts response.read_bodyGet sequence LinkedIn stats
Coming soon. This endpoint will be available by early October 2026.
sequences:read scope (or a broader one that includes it).
Compare A/B variants: get one sequence’s LinkedIn stats per step and per variant, as on its Stats → LinkedIn tab. Set the window with a preset or from and to, not both; if omitted give you the last week.
curl --request POST \
--url https://api.reply.io/v3/sequences/{id}/stats/linkedin \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"filters": {
"dateRangePreset": "lastMonth"
}
}
'import requests
url = "https://api.reply.io/v3/sequences/{id}/stats/linkedin"
payload = { "filters": { "dateRangePreset": "lastMonth" } }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({filters: {dateRangePreset: 'lastMonth'}})
};
fetch('https://api.reply.io/v3/sequences/{id}/stats/linkedin', 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.reply.io/v3/sequences/{id}/stats/linkedin",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'filters' => [
'dateRangePreset' => 'lastMonth'
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.reply.io/v3/sequences/{id}/stats/linkedin"
payload := strings.NewReader("{\n \"filters\": {\n \"dateRangePreset\": \"lastMonth\"\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.reply.io/v3/sequences/{id}/stats/linkedin")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"filters\": {\n \"dateRangePreset\": \"lastMonth\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.reply.io/v3/sequences/{id}/stats/linkedin")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"filters\": {\n \"dateRangePreset\": \"lastMonth\"\n }\n}"
response = http.request(request)
puts response.read_bodyAuthorizations
Authenticate every request with a Bearer token. Pass your Reply API key in the
Authorization header:
Authorization: Bearer <your-api-key>
Get your API key from the Reply dashboard: Settings → API Key.
Path Parameters
Sequence ID
x >= 1Body
Request body for sequence stats. All date filtering lives inside filters — from, to and dateRangePreset are only read there, and properties the schema does not define are ignored rather than rejected. Omit filters entirely and the report covers the lastWeek preset.
Date range filters for sequence stats
Show child attributes
Show child attributes
Response
Sequence LinkedIn stats retrieved successfully
LinkedIn stats for one sequence, broken down per step and per A/B variant — the figures on the sequence's Stats → LinkedIn tab.
Sequence-wide LinkedIn figures — the same figures as linkedInOverview in POST /v3/sequences/{id}/stats.
Show child attributes
Show child attributes
One row per LinkedIn step that sent at least one message in the date range, sorted by stepNumber. Steps without messages (connection requests without a note, profile views, likes, follows, endorsements, comments) are not included, and neither are email steps.
Show child attributes
Show child attributes