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).
Returns LinkedIn engagement metrics overview including connection requests, messages, InMails, and profile views.
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)