Totals
curl --request GET \
--url https://app.replyify.ai/api/analytics/totals \
--header 'Authorization: Bearer <token>'import requests
url = "https://app.replyify.ai/api/analytics/totals"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://app.replyify.ai/api/analytics/totals', 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://app.replyify.ai/api/analytics/totals",
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://app.replyify.ai/api/analytics/totals"
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))
}HttpResponse<String> response = Unirest.get("https://app.replyify.ai/api/analytics/totals")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.replyify.ai/api/analytics/totals")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_bodyAnalytics
Totals
Get aggregated analytics totals for a date range
GET
/
api
/
analytics
/
totals
Totals
curl --request GET \
--url https://app.replyify.ai/api/analytics/totals \
--header 'Authorization: Bearer <token>'import requests
url = "https://app.replyify.ai/api/analytics/totals"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://app.replyify.ai/api/analytics/totals', 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://app.replyify.ai/api/analytics/totals",
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://app.replyify.ai/api/analytics/totals"
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))
}HttpResponse<String> response = Unirest.get("https://app.replyify.ai/api/analytics/totals")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.replyify.ai/api/analytics/totals")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_bodyReturns a single object with totals across the entire requested date range — conversations, replies sent, positive leads, meetings booked, speed-to-lead averages, and a category breakdown.
Conversations are deduplicated by thread so each unique conversation is counted once. Speed metrics use all replies (not deduplicated).
Query Parameters
string
required
Start of date range in
YYYY-MM-DD formatstring
required
End of date range in
YYYY-MM-DD formatstring
Filter to a specific client UUID
Examples
curl -X GET "https://app.replyify.ai/api/analytics/totals?start_date=2025-03-01&end_date=2025-03-31" \
-H "Authorization: Bearer rpl_your_api_key"
const response = await fetch(
'https://app.replyify.ai/api/analytics/totals?start_date=2025-03-01&end_date=2025-03-31',
{
headers: {
'Authorization': 'Bearer rpl_your_api_key'
}
}
);
const data = await response.json();
import requests
response = requests.get(
'https://app.replyify.ai/api/analytics/totals',
params={'start_date': '2025-03-01', 'end_date': '2025-03-31'},
headers={'Authorization': 'Bearer rpl_your_api_key'}
)
data = response.json()
Response Example
{
"data": {
"start_date": "2025-03-01",
"end_date": "2025-03-31",
"total_replies": 342,
"conversations": 218,
"sent": 156,
"positive": 74,
"meetings_booked": 23,
"booking_rate": 31.08,
"avg_reply_speed_minutes": 6.41,
"avg_auto_reply_speed_minutes": 1.15,
"avg_manual_reply_speed_minutes": 18.23,
"category_breakdown": [
{ "category": "Interested", "slug": "interested", "count": 74 },
{ "category": "Not Interested", "slug": "not-interested", "count": 62 },
{ "category": "Out of Office", "slug": "ooo", "count": 38 },
{ "category": "Meeting Booked", "slug": "meeting-booked", "count": 23 },
{ "category": "Bounce", "slug": "bounce", "count": 12 },
{ "category": "Uncategorized", "slug": "uncategorized", "count": 9 }
]
}
}
Response Fields
| Field | Type | Description |
|---|---|---|
start_date | string | Start of the queried range |
end_date | string | End of the queried range |
total_replies | number | Raw inbound reply count (not deduplicated) |
conversations | number | Unique conversations (deduplicated by thread) |
sent | number | Responses sent or handled |
positive | number | Interested / positive leads |
meetings_booked | number | Replies categorized as “meeting-booked” |
booking_rate | number | Percentage of positive replies that booked a meeting |
avg_reply_speed_minutes | number | null | Average time to reply (all replies) |
avg_auto_reply_speed_minutes | number | null | Average time for automated replies |
avg_manual_reply_speed_minutes | number | null | Average time for manual replies |
category_breakdown | array | Count per category, sorted by count descending |
⌘I