Tracking Domains
Add, list, check, and delete branded email tracking domains with Single API v1.0.
Overview
Retrieves all custom tracking domains configured for your account. Tracking domains are used to
brand the links in your emails for open and click tracking.
By default, SendClean uses generic tracking domains, but custom tracking domains:
- Improve recipient trust (links appear to come from your domain)
- Increase click-through rates
- Maintain consistent branding
- Improve deliverability (some spam filters flag generic tracking domains)
For each tracking domain, you'll see:
- Domain name and verification status
- DNS configuration status
- Usage statistics (tracked opens/clicks)
- Creation date
Endpoint Details
| HTTP Method | POST |
|---|---|
| Endpoint Path | v1.0/settings/listTrackingDomain |
| API Version | Single API (v1.0) |
| Content-Type | application/json |
Request Parameters
| Parameter | Type | Required | Description | Example |
|---|---|---|---|---|
| owner_id | String | Yes | Your unique SendClean account identifier | user_12345 |
| token | String | Yes | Your API authentication token for secure access | sk_live_abc123... |
Request Example
Below is a complete example of the request body. Replace placeholder values with your actual credentials and data.
{
"owner_id": "{{owner_id}}",
"token": "{{token}}"
}Response Format
Successful Response:
{
"status": "success",
"code": 200,
"data": {
"items": [
{
"id": "item_001",
"created_at": "2026-04-01T09:00:00Z",
"status": "active"
}
],
"total": 1,
"page": 0
}
}Common Errors & Troubleshooting
401 - Unauthorized: Authentication credentials are missing or invalid
Solution: Verify owner_id and token are correct. Ensure they match your account credentials exactly with no extra whitespace.
500 - Internal server error: Unexpected server error occurred
Solution: Retry the request after a brief delay. If error persists, contact SendClean support with the request details and timestamp.
Implementation Examples
curl -X POST \
https://api.sendclean.com/v1.0/settings/listTrackingDomain \
-H 'Content-Type: application/json' \
-d '{
"owner_id": "{{owner_id}}",
"token": "{{token}}"
}'const axios = require('axios');
const url = 'https://api.sendclean.com/v1.0/settings/listTrackingDomain';
const payload = {
"owner_id": "{{owner_id}}",
"token": "{{token}}"
};
axios.post(url, payload, {
headers: {
'Content-Type': 'application/json'
}
})
.then(response => {
console.log('Success:', response.data);
})
.catch(error => {
console.error('Error:', error.response ? error.response.data : error.message);
});<?php
$url = 'https://api.sendclean.com/v1.0/settings/listTrackingDomain';
$payload = json_decode('{
"owner_id": "{{owner_id}}",
"token": "{{token}}"
}', true);
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($payload));
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Content-Type: application/json'
]);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($httpCode == 200) {
$result = json_decode($response, true);
print_r($result);
} else {
echo "Error: $httpCode - $response";
}
?>Overview
Adds a custom domain for email tracking purposes. After adding, you need to:
- Configure a CNAME record in your DNS
- Point it to SendClean's tracking infrastructure
- Verify DNS propagation
- Set as default tracking domain if desired
Benefits of custom tracking domains:
- All tracking links use your branded domain
- Better email authentication alignment
- Improved recipient trust and click rates
- Consistent brand experience
Example: Instead of links going through "track.sendclean.net", they go through "track.yourbrand.com"
Endpoint Details
| HTTP Method | POST |
|---|---|
| Endpoint Path | v1.0/settings/addTrackingDomain |
| API Version | Single API (v1.0) |
| Content-Type | application/json |
Request Parameters
| Parameter | Type | Required | Description | Example |
|---|---|---|---|---|
| owner_id | String | Yes | Your unique SendClean account identifier | user_12345 |
| token | String | Yes | Your API authentication token for secure access | sk_live_abc123... |
| domain | String | Yes | Domain name to add/verify/check. Must be a domain you own and can modify DNS for | yourdomain.com |
Request Example
Below is a complete example of the request body. Replace placeholder values with your actual credentials and data.
{
"owner_id": "{{owner_id}}",
"token": "{{token}}",
"domain": "http://alertsijon.in/"
}Response Format
Successful Response:
{
"status": "success",
"code": 200,
"message": "Resource created successfully",
"data": {
"id": "resource_abc123",
"created_at": "2026-04-17T10:30:00Z"
}
}Common Errors & Troubleshooting
401 - Unauthorized: Authentication credentials are missing or invalid
Solution: Verify owner_id and token are correct. Ensure they match your account credentials exactly with no extra whitespace.
500 - Internal server error: Unexpected server error occurred
Solution: Retry the request after a brief delay. If error persists, contact SendClean support with the request details and timestamp.
Implementation Examples
curl -X POST \
https://api.sendclean.com/v1.0/settings/addTrackingDomain \
-H 'Content-Type: application/json' \
-d '{
"owner_id": "{{owner_id}}",
"token": "{{token}}",
"domain": "http://alertsijon.in/"
}'const axios = require('axios');
const url = 'https://api.sendclean.com/v1.0/settings/addTrackingDomain';
const payload = {
"owner_id": "{{owner_id}}",
"token": "{{token}}",
"domain": "http://alertsijon.in/"
};
axios.post(url, payload, {
headers: {
'Content-Type': 'application/json'
}
})
.then(response => {
console.log('Success:', response.data);
})
.catch(error => {
console.error('Error:', error.response ? error.response.data : error.message);
});<?php
$url = 'https://api.sendclean.com/v1.0/settings/addTrackingDomain';
$payload = json_decode('{
"owner_id": "{{owner_id}}",
"token": "{{token}}",
"domain": "http://alertsijon.in/"
}', true);
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($payload));
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Content-Type: application/json'
]);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($httpCode == 200) {
$result = json_decode($response, true);
print_r($result);
} else {
echo "Error: $httpCode - $response";
}
?>Overview
Validates that your tracking domain's DNS is correctly configured. This checks:
- CNAME record exists and points to correct target
- DNS has propagated globally
- SSL certificate is valid for HTTPS tracking
- No redirect loops or configuration errors
Proper DNS configuration is required for tracking to work. If this check fails:
- Open tracking won't record
- Click tracking won't work
- Links may appear broken to recipients
Run this after adding a new tracking domain and whenever changing DNS configuration.
Endpoint Details
| HTTP Method | POST |
|---|---|
| Endpoint Path | v1.0/settings/checkTrackingDomain |
| API Version | Single API (v1.0) |
| Content-Type | application/json |
Request Parameters
| Parameter | Type | Required | Description | Example |
|---|---|---|---|---|
| owner_id | String | Yes | Your unique SendClean account identifier | user_12345 |
| token | String | Yes | Your API authentication token for secure access | sk_live_abc123... |
| domain | String | Yes | Domain name to add/verify/check. Must be a domain you own and can modify DNS for | yourdomain.com |
Request Example
Below is a complete example of the request body. Replace placeholder values with your actual credentials and data.
{
"owner_id": "{{owner_id}}",
"token": "{{token}}",
"domain": "http://alertsijon.in/"
}Response Format
Successful Response:
{
"status": "success",
"code": 200,
"message": "Operation completed successfully"
}Common Errors & Troubleshooting
401 - Unauthorized: Authentication credentials are missing or invalid
Solution: Verify owner_id and token are correct. Ensure they match your account credentials exactly with no extra whitespace.
500 - Internal server error: Unexpected server error occurred
Solution: Retry the request after a brief delay. If error persists, contact SendClean support with the request details and timestamp.
Implementation Examples
curl -X POST \
https://api.sendclean.com/v1.0/settings/checkTrackingDomain \
-H 'Content-Type: application/json' \
-d '{
"owner_id": "{{owner_id}}",
"token": "{{token}}",
"domain": "http://alertsijon.in/"
}'const axios = require('axios');
const url = 'https://api.sendclean.com/v1.0/settings/checkTrackingDomain';
const payload = {
"owner_id": "{{owner_id}}",
"token": "{{token}}",
"domain": "http://alertsijon.in/"
};
axios.post(url, payload, {
headers: {
'Content-Type': 'application/json'
}
})
.then(response => {
console.log('Success:', response.data);
})
.catch(error => {
console.error('Error:', error.response ? error.response.data : error.message);
});<?php
$url = 'https://api.sendclean.com/v1.0/settings/checkTrackingDomain';
$payload = json_decode('{
"owner_id": "{{owner_id}}",
"token": "{{token}}",
"domain": "http://alertsijon.in/"
}', true);
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($payload));
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Content-Type: application/json'
]);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($httpCode == 200) {
$result = json_decode($response, true);
print_r($result);
} else {
echo "Error: $httpCode - $response";
}
?>Overview
Removes a custom tracking domain from your account. After deletion:
- Future emails use the default tracking domain
- Historical tracked data remains accessible
- DNS records can be safely removed
- The domain can be re-added later if needed
Only delete tracking domains that are:
- No longer needed
- Being replaced with a different domain
- Incorrectly configured beyond repair
Endpoint Details
| HTTP Method | POST |
|---|---|
| Endpoint Path | v1.0/settings/deleteTrackingDomain |
| API Version | Single API (v1.0) |
| Content-Type | application/json |
Request Parameters
| Parameter | Type | Required | Description | Example |
|---|---|---|---|---|
| owner_id | String | Yes | Your unique SendClean account identifier | user_12345 |
| token | String | Yes | Your API authentication token for secure access | sk_live_abc123... |
| domain | String | Yes | Domain name to add/verify/check. Must be a domain you own and can modify DNS for | yourdomain.com |
Request Example
Below is a complete example of the request body. Replace placeholder values with your actual credentials and data.
{
"owner_id": "{{owner_id}}",
"token": "{{token}}",
"domain": "http://alertsijon.in/"
}Response Format
Successful Response:
{
"status": "success",
"code": 200,
"message": "Resource deleted successfully"
}Common Errors & Troubleshooting
401 - Unauthorized: Authentication credentials are missing or invalid
Solution: Verify owner_id and token are correct. Ensure they match your account credentials exactly with no extra whitespace.
500 - Internal server error: Unexpected server error occurred
Solution: Retry the request after a brief delay. If error persists, contact SendClean support with the request details and timestamp.
Implementation Examples
curl -X POST \
https://api.sendclean.com/v1.0/settings/deleteTrackingDomain \
-H 'Content-Type: application/json' \
-d '{
"owner_id": "{{owner_id}}",
"token": "{{token}}",
"domain": "http://alertsijon.in/"
}'const axios = require('axios');
const url = 'https://api.sendclean.com/v1.0/settings/deleteTrackingDomain';
const payload = {
"owner_id": "{{owner_id}}",
"token": "{{token}}",
"domain": "http://alertsijon.in/"
};
axios.post(url, payload, {
headers: {
'Content-Type': 'application/json'
}
})
.then(response => {
console.log('Success:', response.data);
})
.catch(error => {
console.error('Error:', error.response ? error.response.data : error.message);
});<?php
$url = 'https://api.sendclean.com/v1.0/settings/deleteTrackingDomain';
$payload = json_decode('{
"owner_id": "{{owner_id}}",
"token": "{{token}}",
"domain": "http://alertsijon.in/"
}', true);
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($payload));
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Content-Type: application/json'
]);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($httpCode == 200) {
$result = json_decode($response, true);
print_r($result);
} else {
echo "Error: $httpCode - $response";
}
?>Updated 4 days ago