Campaign analytics
Returns detailed campaign analytics including:
- Overall campaign stats (sent, opened, clicked, bounced, replied, unsubscribed)
- Step-by-step analytics with A/B variant breakdown
- Lead status breakdown (active, completed, bounced, etc.)
- Total replied count
Without from/to, returns all-time data. Supply one or both to filter by date range.
curl -X GET "https://api.sendkit.ai/v1/campaigns/example_string/analytics?from=2024-05-01&to=2024-05-31" \
-H "Content-Type: application/json" \
-H "X-Api-Key: YOUR_API_KEY"
import requests
import json
url = "https://api.sendkit.ai/v1/campaigns/example_string/analytics?from=2024-05-01&to=2024-05-31"
headers = {
"Content-Type": "application/json",
"X-Api-Key": "YOUR_API_KEY"
}
response = requests.get(url, headers=headers)
print(response.json())
const response = await fetch("https://api.sendkit.ai/v1/campaigns/example_string/analytics?from=2024-05-01&to=2024-05-31", {
method: "GET",
headers: {
"Content-Type": "application/json",
"X-Api-Key": "YOUR_API_KEY"
}
});
const data = await response.json();
console.log(data);
package main
import (
"fmt"
"net/http"
)
func main() {
req, err := http.NewRequest("GET", "https://api.sendkit.ai/v1/campaigns/example_string/analytics?from=2024-05-01&to=2024-05-31", nil)
if err != nil {
panic(err)
}
req.Header.Set("Content-Type", "application/json")
req.Header.Set("X-Api-Key", "YOUR_API_KEY")
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
fmt.Println("Response Status:", resp.Status)
}
require 'net/http'
require 'json'
uri = URI('https://api.sendkit.ai/v1/campaigns/example_string/analytics?from=2024-05-01&to=2024-05-31')
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
request = Net::HTTP::Get.new(uri)
request['Content-Type'] = 'application/json'
request['X-Api-Key'] = 'YOUR_API_KEY'
response = http.request(request)
puts response.body
{
"success": true,
"data": {
"campaign": {
"id": "665a1b2c3d4e5f6a7b8c9d0e",
"name": "Q1 Outreach Campaign",
"status": "active",
"startedAt": "2025-06-15T09:00:00.000Z"
},
"stats": {
"sent": 150,
"delivered": 145,
"opened": 72,
"clicked": 18,
"replied": 12,
"bounced": 5,
"unsubscribed": 2
},
"stepAnalytics": [
{
"_id": {
"sequenceStep": 0,
"variant": null
},
"sent": 100,
"opened": 50,
"clicked": 12,
"bounced": 3
},
{
"_id": {
"sequenceStep": 2,
"variant": null
},
"sent": 50,
"opened": 22,
"clicked": 6,
"bounced": 2
}
],
"statusBreakdown": {
"active": 350,
"completed": 100,
"bounced": 5,
"unsubscribed": 2,
"replied": 12,
"removed": 31
},
"totalReplied": 12
}
}
{
"success": false,
"error": {
"code": "NOT_FOUND",
"message": "Campaign not found"
}
}
/v1/campaigns/{campaignId}/analyticsPlatform API key (sk_user_...) or Workspace API key (sk_...)
Campaign ID
Start date (ISO 8601 or date string). Omit for no lower bound.
End date (ISO 8601 or date string). Omit for no upper bound.
Request Preview
Response
Response will appear here after sending the request
Authentication
API Key for authentication. Platform API key (sk_user_...) or Workspace API key (sk_...)
Path Parameters
Campaign ID
Query Parameters
Start date (ISO 8601 or date string). Omit for no lower bound.
End date (ISO 8601 or date string). Omit for no upper bound.
Responses
Overall campaign statistics
Per-step analytics grouped by sequence step and variant
Lead counts grouped by status
Total number of leads that replied
Campaign not found
Last updated today
Built with Documentation.AI