curl --request POST \
--url https://api.reply.io/v3/reporting/linkedin/overview \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"filters": {
"from": "2026-01-01T00:00:00Z",
"to": "2026-03-01T00:00:00Z",
"dateRangePreset": "lastWeek",
"teamIds": [
123
],
"userIds": [
123
],
"contactListIds": [
123
],
"emailValidationStatuses": [],
"companies": [
"<string>"
],
"companySizes": [],
"industries": [
"<string>"
],
"cities": [
"<string>"
],
"states": [
"<string>"
],
"countries": [
"<string>"
],
"titles": [
"<string>"
],
"sequenceIds": [
123
],
"includeOutOfSequence": false,
"emailProviders": [],
"linkedInAccountIds": [
123
]
}
}
'import requests
url = "https://api.reply.io/v3/reporting/linkedin/overview"
payload = { "filters": {
"from": "2026-01-01T00:00:00Z",
"to": "2026-03-01T00:00:00Z",
"dateRangePreset": "lastWeek",
"teamIds": [123],
"userIds": [123],
"contactListIds": [123],
"emailValidationStatuses": [],
"companies": ["<string>"],
"companySizes": [],
"industries": ["<string>"],
"cities": ["<string>"],
"states": ["<string>"],
"countries": ["<string>"],
"titles": ["<string>"],
"sequenceIds": [123],
"includeOutOfSequence": False,
"emailProviders": [],
"linkedInAccountIds": [123]
} }
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: {
from: '2026-01-01T00:00:00Z',
to: '2026-03-01T00:00:00Z',
dateRangePreset: 'lastWeek',
teamIds: [123],
userIds: [123],
contactListIds: [123],
emailValidationStatuses: [],
companies: ['<string>'],
companySizes: [],
industries: ['<string>'],
cities: ['<string>'],
states: ['<string>'],
countries: ['<string>'],
titles: ['<string>'],
sequenceIds: [123],
includeOutOfSequence: false,
emailProviders: [],
linkedInAccountIds: [123]
}
})
};
fetch('https://api.reply.io/v3/reporting/linkedin/overview', 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/reporting/linkedin/overview",
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' => [
'from' => '2026-01-01T00:00:00Z',
'to' => '2026-03-01T00:00:00Z',
'dateRangePreset' => 'lastWeek',
'teamIds' => [
123
],
'userIds' => [
123
],
'contactListIds' => [
123
],
'emailValidationStatuses' => [
],
'companies' => [
'<string>'
],
'companySizes' => [
],
'industries' => [
'<string>'
],
'cities' => [
'<string>'
],
'states' => [
'<string>'
],
'countries' => [
'<string>'
],
'titles' => [
'<string>'
],
'sequenceIds' => [
123
],
'includeOutOfSequence' => false,
'emailProviders' => [
],
'linkedInAccountIds' => [
123
]
]
]),
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/reporting/linkedin/overview"
payload := strings.NewReader("{\n \"filters\": {\n \"from\": \"2026-01-01T00:00:00Z\",\n \"to\": \"2026-03-01T00:00:00Z\",\n \"dateRangePreset\": \"lastWeek\",\n \"teamIds\": [\n 123\n ],\n \"userIds\": [\n 123\n ],\n \"contactListIds\": [\n 123\n ],\n \"emailValidationStatuses\": [],\n \"companies\": [\n \"<string>\"\n ],\n \"companySizes\": [],\n \"industries\": [\n \"<string>\"\n ],\n \"cities\": [\n \"<string>\"\n ],\n \"states\": [\n \"<string>\"\n ],\n \"countries\": [\n \"<string>\"\n ],\n \"titles\": [\n \"<string>\"\n ],\n \"sequenceIds\": [\n 123\n ],\n \"includeOutOfSequence\": false,\n \"emailProviders\": [],\n \"linkedInAccountIds\": [\n 123\n ]\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/reporting/linkedin/overview")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"filters\": {\n \"from\": \"2026-01-01T00:00:00Z\",\n \"to\": \"2026-03-01T00:00:00Z\",\n \"dateRangePreset\": \"lastWeek\",\n \"teamIds\": [\n 123\n ],\n \"userIds\": [\n 123\n ],\n \"contactListIds\": [\n 123\n ],\n \"emailValidationStatuses\": [],\n \"companies\": [\n \"<string>\"\n ],\n \"companySizes\": [],\n \"industries\": [\n \"<string>\"\n ],\n \"cities\": [\n \"<string>\"\n ],\n \"states\": [\n \"<string>\"\n ],\n \"countries\": [\n \"<string>\"\n ],\n \"titles\": [\n \"<string>\"\n ],\n \"sequenceIds\": [\n 123\n ],\n \"includeOutOfSequence\": false,\n \"emailProviders\": [],\n \"linkedInAccountIds\": [\n 123\n ]\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.reply.io/v3/reporting/linkedin/overview")
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 \"from\": \"2026-01-01T00:00:00Z\",\n \"to\": \"2026-03-01T00:00:00Z\",\n \"dateRangePreset\": \"lastWeek\",\n \"teamIds\": [\n 123\n ],\n \"userIds\": [\n 123\n ],\n \"contactListIds\": [\n 123\n ],\n \"emailValidationStatuses\": [],\n \"companies\": [\n \"<string>\"\n ],\n \"companySizes\": [],\n \"industries\": [\n \"<string>\"\n ],\n \"cities\": [\n \"<string>\"\n ],\n \"states\": [\n \"<string>\"\n ],\n \"countries\": [\n \"<string>\"\n ],\n \"titles\": [\n \"<string>\"\n ],\n \"sequenceIds\": [\n 123\n ],\n \"includeOutOfSequence\": false,\n \"emailProviders\": [],\n \"linkedInAccountIds\": [\n 123\n ]\n }\n}"
response = http.request(request)
puts response.read_body{
"connectionsSent": 123,
"connectionsAccepted": 123,
"connectionsAcceptedPercentage": 123,
"messagesSent": 123,
"replied": 123,
"repliedPercentage": 123,
"inMailsSent": 123,
"inMailsReplied": 123,
"inMailsRepliedPercentage": 123,
"connectionNotesSent": 123,
"connectionNotesReplied": 123,
"connectionNotesRepliedPercentage": 123,
"profileViews": 123,
"likes": 123,
"follows": 123,
"endorses": 123,
"regularMessagesSent": 123,
"regularMessagesReplied": 123,
"regularMessagesRepliedPercentage": 123
}{
"title": "Validation failed",
"status": 400,
"detail": "The request body contains validation errors.",
"errors": [
{
"pointer": "/filters",
"detail": "'filters' must not be empty."
}
]
}{
"title": "Unauthorized",
"status": 401,
"detail": "Authentication credentials are missing or invalid."
}{
"title": "Forbidden",
"status": 403,
"detail": "Feature scopes [ViewReports] are denied for userId 123.",
"code": "reports.forbidden"
}{
"title": "Too Many Requests",
"status": 429,
"detail": "Rate limit exceeded. Retry after 60 seconds."
}Get LinkedIn reporting overview
reporting:read scope (or a broader one that includes it).
Use this endpoint when you need LinkedIn activity for a period as one team-wide total — connection requests sent and accepted, connection notes, regular messages and InMails with the replies each drew, and profile views, likes, follows, endorsements and comments, with acceptance and reply rates alongside the raw counts. There is no per-account or per-member split here; use the linkedin endpoint instead when you need the individual actions behind these totals. The request body must carry a filters object; set the window inside it with either from and to or a dateRangePreset — the two cannot be combined, sending neither gives you the last seven days, and both are read in the time zone configured on your Reply account. Figures cover your whole team unless you narrow them with userIds or teamIds, or to specific senders with linkedInAccountIds, and if your role only exposes your own activity you get your own numbers whatever you pass. Reporting must be enabled for your team, and your role must allow viewing the LinkedIn report.
curl --request POST \
--url https://api.reply.io/v3/reporting/linkedin/overview \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"filters": {
"from": "2026-01-01T00:00:00Z",
"to": "2026-03-01T00:00:00Z",
"dateRangePreset": "lastWeek",
"teamIds": [
123
],
"userIds": [
123
],
"contactListIds": [
123
],
"emailValidationStatuses": [],
"companies": [
"<string>"
],
"companySizes": [],
"industries": [
"<string>"
],
"cities": [
"<string>"
],
"states": [
"<string>"
],
"countries": [
"<string>"
],
"titles": [
"<string>"
],
"sequenceIds": [
123
],
"includeOutOfSequence": false,
"emailProviders": [],
"linkedInAccountIds": [
123
]
}
}
'import requests
url = "https://api.reply.io/v3/reporting/linkedin/overview"
payload = { "filters": {
"from": "2026-01-01T00:00:00Z",
"to": "2026-03-01T00:00:00Z",
"dateRangePreset": "lastWeek",
"teamIds": [123],
"userIds": [123],
"contactListIds": [123],
"emailValidationStatuses": [],
"companies": ["<string>"],
"companySizes": [],
"industries": ["<string>"],
"cities": ["<string>"],
"states": ["<string>"],
"countries": ["<string>"],
"titles": ["<string>"],
"sequenceIds": [123],
"includeOutOfSequence": False,
"emailProviders": [],
"linkedInAccountIds": [123]
} }
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: {
from: '2026-01-01T00:00:00Z',
to: '2026-03-01T00:00:00Z',
dateRangePreset: 'lastWeek',
teamIds: [123],
userIds: [123],
contactListIds: [123],
emailValidationStatuses: [],
companies: ['<string>'],
companySizes: [],
industries: ['<string>'],
cities: ['<string>'],
states: ['<string>'],
countries: ['<string>'],
titles: ['<string>'],
sequenceIds: [123],
includeOutOfSequence: false,
emailProviders: [],
linkedInAccountIds: [123]
}
})
};
fetch('https://api.reply.io/v3/reporting/linkedin/overview', 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/reporting/linkedin/overview",
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' => [
'from' => '2026-01-01T00:00:00Z',
'to' => '2026-03-01T00:00:00Z',
'dateRangePreset' => 'lastWeek',
'teamIds' => [
123
],
'userIds' => [
123
],
'contactListIds' => [
123
],
'emailValidationStatuses' => [
],
'companies' => [
'<string>'
],
'companySizes' => [
],
'industries' => [
'<string>'
],
'cities' => [
'<string>'
],
'states' => [
'<string>'
],
'countries' => [
'<string>'
],
'titles' => [
'<string>'
],
'sequenceIds' => [
123
],
'includeOutOfSequence' => false,
'emailProviders' => [
],
'linkedInAccountIds' => [
123
]
]
]),
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/reporting/linkedin/overview"
payload := strings.NewReader("{\n \"filters\": {\n \"from\": \"2026-01-01T00:00:00Z\",\n \"to\": \"2026-03-01T00:00:00Z\",\n \"dateRangePreset\": \"lastWeek\",\n \"teamIds\": [\n 123\n ],\n \"userIds\": [\n 123\n ],\n \"contactListIds\": [\n 123\n ],\n \"emailValidationStatuses\": [],\n \"companies\": [\n \"<string>\"\n ],\n \"companySizes\": [],\n \"industries\": [\n \"<string>\"\n ],\n \"cities\": [\n \"<string>\"\n ],\n \"states\": [\n \"<string>\"\n ],\n \"countries\": [\n \"<string>\"\n ],\n \"titles\": [\n \"<string>\"\n ],\n \"sequenceIds\": [\n 123\n ],\n \"includeOutOfSequence\": false,\n \"emailProviders\": [],\n \"linkedInAccountIds\": [\n 123\n ]\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/reporting/linkedin/overview")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"filters\": {\n \"from\": \"2026-01-01T00:00:00Z\",\n \"to\": \"2026-03-01T00:00:00Z\",\n \"dateRangePreset\": \"lastWeek\",\n \"teamIds\": [\n 123\n ],\n \"userIds\": [\n 123\n ],\n \"contactListIds\": [\n 123\n ],\n \"emailValidationStatuses\": [],\n \"companies\": [\n \"<string>\"\n ],\n \"companySizes\": [],\n \"industries\": [\n \"<string>\"\n ],\n \"cities\": [\n \"<string>\"\n ],\n \"states\": [\n \"<string>\"\n ],\n \"countries\": [\n \"<string>\"\n ],\n \"titles\": [\n \"<string>\"\n ],\n \"sequenceIds\": [\n 123\n ],\n \"includeOutOfSequence\": false,\n \"emailProviders\": [],\n \"linkedInAccountIds\": [\n 123\n ]\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.reply.io/v3/reporting/linkedin/overview")
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 \"from\": \"2026-01-01T00:00:00Z\",\n \"to\": \"2026-03-01T00:00:00Z\",\n \"dateRangePreset\": \"lastWeek\",\n \"teamIds\": [\n 123\n ],\n \"userIds\": [\n 123\n ],\n \"contactListIds\": [\n 123\n ],\n \"emailValidationStatuses\": [],\n \"companies\": [\n \"<string>\"\n ],\n \"companySizes\": [],\n \"industries\": [\n \"<string>\"\n ],\n \"cities\": [\n \"<string>\"\n ],\n \"states\": [\n \"<string>\"\n ],\n \"countries\": [\n \"<string>\"\n ],\n \"titles\": [\n \"<string>\"\n ],\n \"sequenceIds\": [\n 123\n ],\n \"includeOutOfSequence\": false,\n \"emailProviders\": [],\n \"linkedInAccountIds\": [\n 123\n ]\n }\n}"
response = http.request(request)
puts response.read_body{
"connectionsSent": 123,
"connectionsAccepted": 123,
"connectionsAcceptedPercentage": 123,
"messagesSent": 123,
"replied": 123,
"repliedPercentage": 123,
"inMailsSent": 123,
"inMailsReplied": 123,
"inMailsRepliedPercentage": 123,
"connectionNotesSent": 123,
"connectionNotesReplied": 123,
"connectionNotesRepliedPercentage": 123,
"profileViews": 123,
"likes": 123,
"follows": 123,
"endorses": 123,
"regularMessagesSent": 123,
"regularMessagesReplied": 123,
"regularMessagesRepliedPercentage": 123
}{
"title": "Validation failed",
"status": 400,
"detail": "The request body contains validation errors.",
"errors": [
{
"pointer": "/filters",
"detail": "'filters' must not be empty."
}
]
}{
"title": "Unauthorized",
"status": 401,
"detail": "Authentication credentials are missing or invalid."
}{
"title": "Forbidden",
"status": 403,
"detail": "Feature scopes [ViewReports] are denied for userId 123.",
"code": "reports.forbidden"
}{
"title": "Too Many Requests",
"status": 429,
"detail": "Rate limit exceeded. Retry after 60 seconds."
}Authorizations
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.
Body
Filters specific to LinkedIn reporting endpoints
Show child attributes
Show child attributes
Response
LinkedIn overview retrieved successfully
LinkedIn engagement metrics overview
Number of connection requests sent
Number of connection requests accepted
Connection acceptance rate as a percentage (0–100)
Number of LinkedIn messages sent
Number of message replies received
Message reply rate as a percentage (0–100)
Number of InMails sent
Number of InMail replies received
InMail reply rate as a percentage (0–100)
Number of connection notes sent
Number of connection note replies received
Connection notes reply rate as a percentage (0–100)
Number of profile views
Number of likes
Number of follows
Number of endorsements
Number of regular messages sent
Number of regular message replies received
Regular messages reply rate as a percentage (0–100)