curl --request GET \
--url https://api.sendx.io/api/v1/rest/report/campaign/{identifier} \
--header 'X-Team-ApiKey: <api-key>'import requests
url = "https://api.sendx.io/api/v1/rest/report/campaign/{identifier}"
headers = {"X-Team-ApiKey": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-Team-ApiKey': '<api-key>'}};
fetch('https://api.sendx.io/api/v1/rest/report/campaign/{identifier}', 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.sendx.io/api/v1/rest/report/campaign/{identifier}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-Team-ApiKey: <api-key>"
],
]);
$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://api.sendx.io/api/v1/rest/report/campaign/{identifier}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-Team-ApiKey", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.sendx.io/api/v1/rest/report/campaign/{identifier}")
.header("X-Team-ApiKey", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.sendx.io/api/v1/rest/report/campaign/{identifier}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-Team-ApiKey"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"campaignId": "campaign_6h8DnYrHt4KktCnG8PDO5Z",
"linkStats": [
{
"url": "https://sendx.io",
"count": 10
}
],
"clickedUniqueContactCount": 10,
"openedUniqueContactCount": 14,
"sentContactCount": 20,
"unsubscribeContactCount": 5,
"bounceContactCount": 3,
"spamContactCount": 2,
"clickedContactCount": 10,
"openedContactCount": 14
}{
"status": 401,
"message": "The Team ID or API Key specified is not valid"
}{
"status": "error",
"message": "Resource not found"
}{
"status": "error",
"message": "Internal server error occurred"
}Get campaign report
Retrieves a detailed performance report for a specific campaign.
curl --request GET \
--url https://api.sendx.io/api/v1/rest/report/campaign/{identifier} \
--header 'X-Team-ApiKey: <api-key>'import requests
url = "https://api.sendx.io/api/v1/rest/report/campaign/{identifier}"
headers = {"X-Team-ApiKey": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-Team-ApiKey': '<api-key>'}};
fetch('https://api.sendx.io/api/v1/rest/report/campaign/{identifier}', 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.sendx.io/api/v1/rest/report/campaign/{identifier}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-Team-ApiKey: <api-key>"
],
]);
$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://api.sendx.io/api/v1/rest/report/campaign/{identifier}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-Team-ApiKey", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.sendx.io/api/v1/rest/report/campaign/{identifier}")
.header("X-Team-ApiKey", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.sendx.io/api/v1/rest/report/campaign/{identifier}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-Team-ApiKey"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"campaignId": "campaign_6h8DnYrHt4KktCnG8PDO5Z",
"linkStats": [
{
"url": "https://sendx.io",
"count": 10
}
],
"clickedUniqueContactCount": 10,
"openedUniqueContactCount": 14,
"sentContactCount": 20,
"unsubscribeContactCount": 5,
"bounceContactCount": 3,
"spamContactCount": 2,
"clickedContactCount": 10,
"openedContactCount": 14
}{
"status": 401,
"message": "The Team ID or API Key specified is not valid"
}{
"status": "error",
"message": "Resource not found"
}{
"status": "error",
"message": "Internal server error occurred"
}- Open and click rates
- Unsubscribe and bounce rates
- Link-level click tracking
- Geolocation data
Authorizations
Team API key for authentication. Find your API key in SendX Settings → Team API Key.
Example:
X-Team-ApiKey: your_team_api_key_here
Path Parameters
Resource identifier with prefix (e.g., contact_BnKjkbBBS500CoBCP0oChQ)
Format: <prefix>_<22-character-id>
^[a-z_]+_[a-zA-Z0-9]{22}$"contact_BnKjkbBBS500CoBCP0oChQ"
Response
✅ Report retrieved successfully
Unique identifier of the campaign
"campaign_6h8DnYrHt4KktCnG8PDO5Z"
Show child attributes
Show child attributes
Total number of unique contacts who clicked on the link
10
Total number of unique contacts who opened the link
14
Total number of contacts who sent the link
20
Total number of contacts who unsubscribed from the link
5
Total number of contacts who bounced the link
3
Total number of contacts who marked the link as spam
2
Total number of contacts who clicked on the link
10
Total number of contacts who opened the link
14
Was this page helpful?