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:

  1. Add the domain using this endpoint
  2. Configure DNS records (DKIM, SPF, DMARC)
  3. Verify domain ownership
  4. 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 MethodPOST
Endpoint Pathv1.0/settings/addSendingDomain
API VersionSingle API (v1.0)
Content-Typeapplication/json

Request Parameters

ParameterTypeRequiredDescriptionExample
owner_idStringYesYour unique SendClean account identifieruser_12345
tokenStringYesYour API authentication token for secure accesssk_live_abc123...
domainStringYesDomain name to add/verify/check. Must be a domain you own and can modify DNS foryourdomain.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 MethodPOST
Endpoint Pathv1.0/settings/listSendingDomain
API VersionSingle API (v1.0)
Content-Typeapplication/json

Request Parameters

ParameterTypeRequiredDescriptionExample
owner_idStringYesYour unique SendClean account identifieruser_12345
tokenStringYesYour API authentication token for secure accesssk_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:

  1. SendClean sends a verification email to a mailbox on your domain
  2. You click the verification link in that email
  3. 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 MethodPOST
Endpoint Pathv1.0/settings/verifySendingDomain
API VersionSingle API (v1.0)
Content-Typeapplication/json

Request Parameters

ParameterTypeRequiredDescriptionExample
owner_idStringYesYour unique SendClean account identifieruser_12345
tokenStringYesYour API authentication token for secure accesssk_live_abc123...
domainStringYesDomain name to add/verify/check. Must be a domain you own and can modify DNS foryourdomain.com
mailboxStringYesMailbox name for domain verification. Used to send verification emailadmin

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 json

url = "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 MethodPOST
Endpoint Pathv1.0/settings/checkSendingDomain
API VersionSingle API (v1.0)
Content-Typeapplication/json

Request Parameters

ParameterTypeRequiredDescriptionExample
owner_idStringYesYour unique SendClean account identifieruser_12345
tokenStringYesYour API authentication token for secure accesssk_live_abc123...
domainStringYesDomain name to add/verify/check. Must be a domain you own and can modify DNS foryourdomain.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 MethodPOST
Endpoint Pathv1.0/settings/deleteSendingDomain
API VersionSingle API (v1.0)
Content-Typeapplication/json

Request Parameters

ParameterTypeRequiredDescriptionExample
owner_idStringYesYour unique SendClean account identifieruser_12345
tokenStringYesYour API authentication token for secure accesssk_live_abc123...
domainStringYesDomain name to add/verify/check. Must be a domain you own and can modify DNS foryourdomain.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";
}

?>

Did this page help you?