Get stats for all sequences
curl --request POST \
--url https://api.reply.io/v3/sequences/stats \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"filters": {
"from": "2023-11-07T05:31:56Z",
"to": "2023-11-07T05:31:56Z",
"userIds": [
123
]
}
}
'import requests
url = "https://api.reply.io/v3/sequences/stats"
payload = { "filters": {
"from": "2023-11-07T05:31:56Z",
"to": "2023-11-07T05:31:56Z",
"userIds": [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: '2023-11-07T05:31:56Z', to: '2023-11-07T05:31:56Z', userIds: [123]}
})
};
fetch('https://api.reply.io/v3/sequences/stats', 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/stats",
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' => '2023-11-07T05:31:56Z',
'to' => '2023-11-07T05:31:56Z',
'userIds' => [
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/sequences/stats"
payload := strings.NewReader("{\n \"filters\": {\n \"from\": \"2023-11-07T05:31:56Z\",\n \"to\": \"2023-11-07T05:31:56Z\",\n \"userIds\": [\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/sequences/stats")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"filters\": {\n \"from\": \"2023-11-07T05:31:56Z\",\n \"to\": \"2023-11-07T05:31:56Z\",\n \"userIds\": [\n 123\n ]\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.reply.io/v3/sequences/stats")
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\": \"2023-11-07T05:31:56Z\",\n \"to\": \"2023-11-07T05:31:56Z\",\n \"userIds\": [\n 123\n ]\n }\n}"
response = http.request(request)
puts response.read_body[
{
"sequenceId": 123,
"name": "<string>",
"emailOverview": {
"contacted": 123,
"delivered": 123,
"opened": 123,
"replied": 123,
"interested": 123,
"notReached": 123,
"optedOut": 123,
"outOfOffice": 123,
"bounced": 123,
"autoReplied": 123,
"meetingsBooked": 123,
"deliveredPercentage": 123,
"openedPercentage": 123,
"repliedPercentage": 123,
"interestedPercentage": 123,
"notReachedPercentage": 123,
"optedOutPercentage": 123,
"outOfOfficePercentage": 123,
"bouncedPercentage": 123,
"autoRepliedPercentage": 123,
"meetingsBookedPercentage": 123
},
"linkedInOverview": {
"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": "Date range must not exceed 31 days."
}
]
}{
"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": "sequenceStats.forbidden"
}{
"title": "Too Many Requests",
"status": 429,
"detail": "Rate limit exceeded. Retry after 60 seconds."
}Sequences
Get stats for all sequences
Requires the
sequences:read scope (or a broader one that includes it).
Returns email and LinkedIn engagement stats per sequence.
Date range restrictions:
dateRangePresetmust belastWeekorlastMonth.lastYearandallTimeare rejected.- When using
from/to, the span must not exceed 31 days. frommust be within the last 31 days from the current date.- Defaults to
lastWeekif no date filters are provided.
POST
/
v3
/
sequences
/
stats
Get stats for all sequences
curl --request POST \
--url https://api.reply.io/v3/sequences/stats \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"filters": {
"from": "2023-11-07T05:31:56Z",
"to": "2023-11-07T05:31:56Z",
"userIds": [
123
]
}
}
'import requests
url = "https://api.reply.io/v3/sequences/stats"
payload = { "filters": {
"from": "2023-11-07T05:31:56Z",
"to": "2023-11-07T05:31:56Z",
"userIds": [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: '2023-11-07T05:31:56Z', to: '2023-11-07T05:31:56Z', userIds: [123]}
})
};
fetch('https://api.reply.io/v3/sequences/stats', 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/stats",
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' => '2023-11-07T05:31:56Z',
'to' => '2023-11-07T05:31:56Z',
'userIds' => [
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/sequences/stats"
payload := strings.NewReader("{\n \"filters\": {\n \"from\": \"2023-11-07T05:31:56Z\",\n \"to\": \"2023-11-07T05:31:56Z\",\n \"userIds\": [\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/sequences/stats")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"filters\": {\n \"from\": \"2023-11-07T05:31:56Z\",\n \"to\": \"2023-11-07T05:31:56Z\",\n \"userIds\": [\n 123\n ]\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.reply.io/v3/sequences/stats")
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\": \"2023-11-07T05:31:56Z\",\n \"to\": \"2023-11-07T05:31:56Z\",\n \"userIds\": [\n 123\n ]\n }\n}"
response = http.request(request)
puts response.read_body[
{
"sequenceId": 123,
"name": "<string>",
"emailOverview": {
"contacted": 123,
"delivered": 123,
"opened": 123,
"replied": 123,
"interested": 123,
"notReached": 123,
"optedOut": 123,
"outOfOffice": 123,
"bounced": 123,
"autoReplied": 123,
"meetingsBooked": 123,
"deliveredPercentage": 123,
"openedPercentage": 123,
"repliedPercentage": 123,
"interestedPercentage": 123,
"notReachedPercentage": 123,
"optedOutPercentage": 123,
"outOfOfficePercentage": 123,
"bouncedPercentage": 123,
"autoRepliedPercentage": 123,
"meetingsBookedPercentage": 123
},
"linkedInOverview": {
"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": "Date range must not exceed 31 days."
}
]
}{
"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": "sequenceStats.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
application/json
Date range filters for sequence stats list.
Restrictions: Date range is limited to one month maximum.
dateRangePresetmust belastWeekorlastMonth.lastYearandallTimeare rejected.- When using
from/to, the span must not exceed 31 days. frommust be within the last 31 days from the current date.
Show child attributes
Show child attributes
Response
Sequence stats list retrieved successfully
Sequence ID
Sequence name
Current sequence status
Available options:
new, active, paused, archived Email engagement metrics for a sequence
Show child attributes
Show child attributes
LinkedIn engagement metrics for a sequence
Show child attributes
Show child attributes
⌘I