Sending Domains
Add, list, verify, check, and delete sending domains with Single API v1.0.
Overview
Registers a new sending domain with SendClean. Before you can send emails from an address at your domain,
you must:
- Add the domain using this endpoint
- Configure DNS records (DKIM, SPF, DMARC)
- Verify domain ownership
- Pass DKIM/SPF checks
The domain verification process ensures:
- You own the domain (prevents impersonation)
- Proper email authentication is configured
- Your emails will have good deliverability
- ISPs can verify the legitimacy of your emails
After adding a domain, SendClean provides the DNS records you need to add. Most domain verification completes within 24-48
hours after DNS propagation.
Endpoint Details
| HTTP Method | POST |
|---|---|
| Endpoint Path | v1.0/settings/addSendingDomain |
| 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 Use Cases
- Configure new corporate domain for company-wide email sending
- Add subdomain for specific department or brand
- Set up testing domain before production deployment
- Configure multi-brand infrastructure for different products
Best Practices
- • Add domains during low-traffic periods to avoid urgent DNS issues
- • Configure DKIM, SPF, and DMARC records before sending production email
- • Use subdomains for different email types (transactional.domain.com vs marketing.domain.com)
- • Verify domain ownership promptly to avoid delays
- • Monitor domain reputation scores regularly
Common Errors & Troubleshooting
400 - Invalid domain: Domain format is invalid or not permitted
Solution: Ensure domain is a valid FQDN without http:// or trailing slashes. Use just the domain (example.com) not a full URL.
409 - Domain already exists: This domain is already configured
Solution: Check your domain list. If you need to reconfigure, delete the existing domain first, then re-add.
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/addSendingDomain \
-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/addSendingDomain';
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/addSendingDomain';
$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
Returns all sending domains configured in your account along with their verification status, DNS record
status, and usage statistics.
For each domain, you'll see:
- Domain name and added date
- Verification status (Pending/Verified)
- DKIM status (Not configured/Valid/Invalid)
- SPF status (Not configured/Valid/Invalid)
- DMARC policy if configured
- Recent sending volume from this domain
Use this to:
- Monitor domain configuration status
- Identify domains needing DNS fixes
- Audit which domains are actively used
- Plan domain additions or removals
Endpoint Details
| HTTP Method | POST |
|---|---|
| Endpoint Path | v1.0/settings/listSendingDomain |
| 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/listSendingDomain \
-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/listSendingDomain';
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/listSendingDomain';
$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
Initiates or completes domain verification process. Domain verification proves you own the domain and
have permission to send email from it.
The verification process:
- SendClean sends a verification email to a mailbox on your domain
- You click the verification link in that email
- Or, you can verify by adding a TXT record to your domain's DNS
This endpoint can:
- Trigger a new verification email
- Check verification status
- Complete verification using an email click or DNS record
Verified domains are required before you can send any production email.
Endpoint Details
| HTTP Method | POST |
|---|---|
| Endpoint Path | v1.0/settings/verifySendingDomain |
| 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 |
| mailbox | String | Yes | Mailbox name for domain verification. Used to send verification email | admin |
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/",
"mailbox": "Archana"
}Response Format
Successful Response:
{
"status": "success",
"code": 200,
"message": "Email queued successfully",
"data": {
"message_id": "msg_abc123xyz",
"queued_at": "2026-04-17T10:30:00Z",
"recipients": 1
}
}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
Python (requests):
import requests
import jsonurl = "https://api.sendclean.com/v1.0/settings/verifySendingDomain"
payload =:
{
"owner_id": "{{owner_id}}",
"token": "{{token}}",
"domain": "http://alertsijon.in/",
"mailbox": "Archana"
}headers =:
{
"Content-Type": "application/json"
}response = requests.post(url, json=payload, headers=headers)
if response.status_code == 200:
result = response.json()
print("Success:", result)
else:
print("Error:", response.status_code, response.text)
curl -X POST \
https://api.sendclean.com/v1.0/settings/verifySendingDomain \
-H 'Content-Type: application/json' \
-d '{
"owner_id": "{{owner_id}}",
"token": "{{token}}",
"domain": "http://alertsijon.in/",
"mailbox": "Archana"
}'const axios = require('axios');
const url = 'https://api.sendclean.com/v1.0/settings/verifySendingDomain';
const payload = {
"owner_id": "{{owner_id}}",
"token": "{{token}}",
"domain": "http://alertsijon.in/",
"mailbox": "Archana"
};
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/verifySendingDomain';
$payload = json_decode('{
"owner_id": "{{owner_id}}",
"token": "{{token}}",
"domain": "http://alertsijon.in/",
"mailbox": "Archana"
}', 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
Checks the status of DKIM (DomainKeys Identified Mail) and SPF (Sender Policy Framework) records for your
sending domain. These are critical email authentication mechanisms that:
DKIM:
- Cryptographically signs your emails
- Proves the email came from your domain
- Prevents email tampering in transit
- Improves inbox placement rates
SPF:
- Lists authorized mail servers for your domain
- Prevents spoofing of your domain
- Required by most ISPs for good deliverability
This endpoint validates:
- DKIM record exists and is properly formatted
- SPF record includes SendClean's sending infrastructure
- Records are correctly published in DNS
- No syntax errors in the records
Failed DKIM/SPF checks will significantly harm your deliverability, so monitor this regularly.
Endpoint Details
| HTTP Method | POST |
|---|---|
| Endpoint Path | v1.0/settings/checkSendingDomain |
| 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/checkSendingDomain \
-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/checkSendingDomain';
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/checkSendingDomain';
$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 sending domain from your SendClean account. This is a permanent operation that:
- Prevents sending from this domain
- Removes all DNS verification records
- Deletes domain configuration history
- Cannot be undone
Only delete domains that:
- Are no longer in use
- Were added by mistake
- Are being migrated to a different account
Warning: If you have active email campaigns using this domain, they will fail after deletion. Verify no active uses exist
Before deleting.
Endpoint Details
| HTTP Method | POST |
|---|---|
| Endpoint Path | v1.0/settings/deleteSendingDomain |
| 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/deleteSendingDomain \
-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/deleteSendingDomain';
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/deleteSendingDomain';
$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