Websites
Add Sending Domain
Add a sending domain and get its DNS setup records
POST
/
api
/
v1
/
websites
Add Sending Domain
curl --request POST \
--url https://api.sequenzy.com/api/v1/websites \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"domain": "<string>",
"mailFromPrefix": "<string>",
"trackingPrefix": "<string>"
}
'import requests
url = "https://api.sequenzy.com/api/v1/websites"
payload = {
"domain": "<string>",
"mailFromPrefix": "<string>",
"trackingPrefix": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({domain: '<string>', mailFromPrefix: '<string>', trackingPrefix: '<string>'})
};
fetch('https://api.sequenzy.com/api/v1/websites', 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.sequenzy.com/api/v1/websites",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'domain' => '<string>',
'mailFromPrefix' => '<string>',
'trackingPrefix' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.sequenzy.com/api/v1/websites"
payload := strings.NewReader("{\n \"domain\": \"<string>\",\n \"mailFromPrefix\": \"<string>\",\n \"trackingPrefix\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.sequenzy.com/api/v1/websites")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"domain\": \"<string>\",\n \"mailFromPrefix\": \"<string>\",\n \"trackingPrefix\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.sequenzy.com/api/v1/websites")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"domain\": \"<string>\",\n \"mailFromPrefix\": \"<string>\",\n \"trackingPrefix\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"website": {
"id": "domain_abc123",
"domain": "mail.example.com",
"status": "not_started",
"dnsVerified": false,
"readyToSend": false,
"readiness": {
"status": "setup_required",
"reason": "dns_not_started"
},
"dnsRecords": {
"dkimType": "byodkim",
"byodkimRecord": {
"name": "sq1._domainkey.mail.example.com",
"value": "p=PUBLIC_KEY"
},
"byodkimStatus": "pending",
"platformDnsRecords": [
{
"purpose": "dkim",
"type": "CNAME",
"name": "sq1._domainkey.mail.example.com",
"value": "sq1.k7f3q2ab.d.sequenzydns.com",
"required": true,
"status": "pending"
},
{
"purpose": "dkim_spare",
"type": "CNAME",
"name": "sq2._domainkey.mail.example.com",
"value": "sq2.k7f3q2ab.d.sequenzydns.com",
"required": false,
"status": "pending"
},
{
"purpose": "ses_return_path",
"type": "CNAME",
"name": "rp2.mail.example.com",
"value": "r2.k7f3q2ab.d.sequenzydns.com",
"required": false,
"status": "pending"
}
],
"spfRecord": {
"name": "rp.mail.example.com",
"value": "v=spf1 include:spf.sequenzydns.com ~all"
},
"spfStatus": "pending",
"mxRecord": {
"name": "rp.mail.example.com",
"value": "bounce.sequenzydns.com",
"priority": 10
},
"mxStatus": "pending",
"dmarcRecord": {
"name": "_dmarc.example.com",
"suggestedValue": "v=DMARC1; p=none;"
},
"dmarcStatus": "pending",
"mailFromDomain": "rp.mail.example.com",
"returnPathCnameRecord": {
"name": "rp.mail.example.com",
"value": "r1.k7f3q2ab.d.sequenzydns.com"
},
"returnPathCnameStatus": "pending",
"trackingRecord": {
"name": "links.mail.example.com",
"value": "links1.sequenzydns.com"
},
"trackingStatus": "not_started"
},
"dkim": {
"type": "byodkim",
"status": "pending",
"diagnostic": null
},
"spf": {
"status": "pending",
"record": {
"name": "rp.mail.example.com",
"value": "v=spf1 include:spf.sequenzydns.com ~all"
},
"diagnostic": null
},
"mailFrom": {
"status": "pending",
"mxRecord": {
"name": "rp.mail.example.com",
"value": "bounce.sequenzydns.com",
"priority": 10
},
"diagnostic": null
},
"bounceRecords": {
"style": "cname",
"cnameRecord": {
"name": "rp.mail.example.com",
"value": "r1.k7f3q2ab.d.sequenzydns.com"
},
"status": "pending",
"diagnostic": null
},
"tracking": {
"policy": "legacy",
"required": false,
"hostname": "links.mail.example.com",
"status": "not_started",
"ready": false,
"error": null,
"cnameRecord": {
"type": "CNAME",
"name": "links.mail.example.com",
"value": "links1.sequenzydns.com"
}
},
"lastVerifiedAt": null,
"nextVerificationAt": null,
"createdAt": "2026-07-23T12:00:00.000Z",
"message": "Domain added. Configure DNS records; sending becomes available once DNS is verified and activation finishes."
}
}
{
"success": true,
"website": {
"id": "domain_abc123",
"domain": "mail.example.com",
"status": "not_started",
"dnsRecords": {
"dkimType": "byodkim",
"byodkimRecord": {
"name": "sequenzy._domainkey.mail.example.com",
"value": "p=PUBLIC_KEY"
},
"byodkimStatus": "pending",
"spfRecord": {
"name": "rp.mail.example.com",
"value": "v=spf1 include:amazonses.com ~all"
},
"spfStatus": "pending",
"mxRecord": {
"name": "rp.mail.example.com",
"value": "feedback-smtp.us-east-1.amazonses.com",
"priority": 10
},
"mxStatus": "pending",
"mailFromDomain": "rp.mail.example.com"
},
"dkim": {
"type": "byodkim",
"status": "pending",
"diagnostic": null
},
"spf": {
"status": "pending",
"record": {
"name": "rp.mail.example.com",
"value": "v=spf1 include:amazonses.com ~all"
},
"diagnostic": null
},
"mailFrom": {
"status": "pending",
"domain": "rp.mail.example.com",
"mxRecord": {
"name": "rp.mail.example.com",
"value": "feedback-smtp.us-east-1.amazonses.com",
"priority": 10
},
"diagnostic": null
},
"bounceRecords": {
"style": "mx_txt",
"cnameRecord": null,
"status": "pending",
"diagnostic": null
},
"appleEmailSources": ["rp.mail.example.com", "example.com"],
"tracking": {
"policy": "legacy",
"required": false,
"hostname": null,
"status": null,
"ready": false,
"error": null,
"cnameRecord": null
},
"lastVerifiedAt": null,
"nextVerificationAt": null,
"createdAt": "2026-07-13T12:00:00.000Z",
"message": "Domain already exists"
}
}
{
"success": false,
"error": "Invalid domain"
}
{
"success": false,
"error": "Return path and tracking subdomains must be different."
}
{
"success": false,
"error": "Unauthorized"
}
{
"success": false,
"code": "DOMAIN_ALREADY_CONFIGURED",
"error": "Domain already configured",
"title": "Domain already configured",
"description": "The domain \"mail.example.com\" is already configured as a sending domain in Sequenzy. Sending domains are globally unique, so the same domain cannot be added to another company.",
"resolution": "Call list_websites for the current company. If the domain is listed, use check_website for its DNS status. If it is not listed, it belongs to another company; the API, CLI and MCP cannot move or remove it. Ask the user whether to use a different sending domain, or have an owner remove it from the other company in the Sequenzy dashboard (Settings > Domain) and then add it here. Removal deletes the domain's senders and requires publishing a new DKIM record and verifying DNS again.",
"docsUrl": "https://docs.sequenzy.com/api-reference/websites/create",
"details": {
"domain": "mail.example.com"
}
}
{
"success": false,
"error": "Failed to create domain"
}
Add a sending domain to the authenticated company. Publish the DKIM record,
the bounce records described by
MCP clients should call
Invalid labels, or a tracking label that lands on the bounce hostname, return 400. Re-adding a domain that already exists returns its stored records and
ignores both labels.
website.bounceRecords, DMARC when present,
and the optional tracking record before running verification. Newly added
domains always return the unified Sequenzy record set with required DMARC, and
publish their bounce subdomain as one CNAME (website.bounceRecords.cnameRecord)
that stands in for the spfRecord and mxRecord entries, so it also works
where your DNS host blocks custom MX records. Verification checks SPF and MX
through the CNAME. Re-adding a domain that already exists returns its stored
records, which for domains created before the unified rollout can still be
the legacy MAIL FROM shape.
When website.dnsRecords.platformDnsRecords is present, publish those CNAMEs
instead of the DKIM TXT record in byodkimRecord. Each entry has purpose
(dkim, dkim_spare or ses_return_path), type, name, value, required
and status. Only required entries block verification. The spare DKIM
selector lets Sequenzy change the key without a DNS change from you, and the
return-path CNAME, once it resolves, aligns SPF with your domain on every email. byodkimRecord
stays in the response and still verifies if you publish it as a TXT record,
but then a key change needs a DNS change from you. Branch on whether
platformDnsRecords is present, not on when the domain was added.
A sending domain does not receive mail. To receive replies and other mail on
your own domain, add a receiving domain, such
as support.example.com. The deprecated dnsRecords.inbound* fields appear
only on domains with a reply setup from before receiving domains.
Tracked links and opens use your company tracking domain, which every sending
domain shares. When your company has none yet, adding a domain creates it
under that domain, links.<domain> by default (links.mail.example.com for
mail.example.com), and returns its CNAME in dnsRecords.trackingRecord.
It is optional: the domain verifies and sends without it, and links use
Sequenzy’s shared tracking domain until it verifies. Once your tracking domain
works, later domains reuse it with nothing to add. website.tracking reports
its status; manage it with Set Tracking Domain.
A sending domain belongs to exactly one company, so confirm the target company
before adding it.
add_sending_domain. The older add_website tool remains available as a compatibility alias.
Do not hard-code the example record count or provider hostnames. Treat the
returned
dnsRecords object as authoritative so clients work with both
unified and legacy domains.Request
string
required
Domain to add.
string
default:"rp"
Return-path (MAIL FROM) subdomain label. The return-path CNAME is published at
<mailFromPrefix>.<domain>, and new domains get a second one, usually
<mailFromPrefix>2.<domain> (rp2 by default). Publish the names returned in
dnsRecords.platformDnsRecords. Use one DNS label of 1 to 63 letters, numbers or
hyphens, without a leading or trailing hyphen; inbound is reserved. It applies
only when the domain is created.string
default:"links"
Label of the company tracking domain created under the domain,
<trackingPrefix>.<domain>. When it equals mailFromPrefix, the tracking
domain goes on the root instead (<trackingPrefix>.<root>). It is used only
when your company has no tracking domain yet and is ignored otherwise. When the hostname is in use, the label
followed by 2 to 5 is tried (for example links2); when none is free, the
domain is added without a tracking domain. Change the tracking domain later with
Set Tracking Domain.curl -X POST "https://api.sequenzy.com/api/v1/websites" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"domain": "mail.example.com"}'
curl -X POST "https://api.sequenzy.com/api/v1/websites" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"domain": "mail.example.com", "mailFromPrefix": "bounce", "trackingPrefix": "click"}'
Responses
{
"success": true,
"website": {
"id": "domain_abc123",
"domain": "mail.example.com",
"status": "not_started",
"dnsVerified": false,
"readyToSend": false,
"readiness": {
"status": "setup_required",
"reason": "dns_not_started"
},
"dnsRecords": {
"dkimType": "byodkim",
"byodkimRecord": {
"name": "sq1._domainkey.mail.example.com",
"value": "p=PUBLIC_KEY"
},
"byodkimStatus": "pending",
"platformDnsRecords": [
{
"purpose": "dkim",
"type": "CNAME",
"name": "sq1._domainkey.mail.example.com",
"value": "sq1.k7f3q2ab.d.sequenzydns.com",
"required": true,
"status": "pending"
},
{
"purpose": "dkim_spare",
"type": "CNAME",
"name": "sq2._domainkey.mail.example.com",
"value": "sq2.k7f3q2ab.d.sequenzydns.com",
"required": false,
"status": "pending"
},
{
"purpose": "ses_return_path",
"type": "CNAME",
"name": "rp2.mail.example.com",
"value": "r2.k7f3q2ab.d.sequenzydns.com",
"required": false,
"status": "pending"
}
],
"spfRecord": {
"name": "rp.mail.example.com",
"value": "v=spf1 include:spf.sequenzydns.com ~all"
},
"spfStatus": "pending",
"mxRecord": {
"name": "rp.mail.example.com",
"value": "bounce.sequenzydns.com",
"priority": 10
},
"mxStatus": "pending",
"dmarcRecord": {
"name": "_dmarc.example.com",
"suggestedValue": "v=DMARC1; p=none;"
},
"dmarcStatus": "pending",
"mailFromDomain": "rp.mail.example.com",
"returnPathCnameRecord": {
"name": "rp.mail.example.com",
"value": "r1.k7f3q2ab.d.sequenzydns.com"
},
"returnPathCnameStatus": "pending",
"trackingRecord": {
"name": "links.mail.example.com",
"value": "links1.sequenzydns.com"
},
"trackingStatus": "not_started"
},
"dkim": {
"type": "byodkim",
"status": "pending",
"diagnostic": null
},
"spf": {
"status": "pending",
"record": {
"name": "rp.mail.example.com",
"value": "v=spf1 include:spf.sequenzydns.com ~all"
},
"diagnostic": null
},
"mailFrom": {
"status": "pending",
"mxRecord": {
"name": "rp.mail.example.com",
"value": "bounce.sequenzydns.com",
"priority": 10
},
"diagnostic": null
},
"bounceRecords": {
"style": "cname",
"cnameRecord": {
"name": "rp.mail.example.com",
"value": "r1.k7f3q2ab.d.sequenzydns.com"
},
"status": "pending",
"diagnostic": null
},
"tracking": {
"policy": "legacy",
"required": false,
"hostname": "links.mail.example.com",
"status": "not_started",
"ready": false,
"error": null,
"cnameRecord": {
"type": "CNAME",
"name": "links.mail.example.com",
"value": "links1.sequenzydns.com"
}
},
"lastVerifiedAt": null,
"nextVerificationAt": null,
"createdAt": "2026-07-23T12:00:00.000Z",
"message": "Domain added. Configure DNS records; sending becomes available once DNS is verified and activation finishes."
}
}
{
"success": true,
"website": {
"id": "domain_abc123",
"domain": "mail.example.com",
"status": "not_started",
"dnsRecords": {
"dkimType": "byodkim",
"byodkimRecord": {
"name": "sequenzy._domainkey.mail.example.com",
"value": "p=PUBLIC_KEY"
},
"byodkimStatus": "pending",
"spfRecord": {
"name": "rp.mail.example.com",
"value": "v=spf1 include:amazonses.com ~all"
},
"spfStatus": "pending",
"mxRecord": {
"name": "rp.mail.example.com",
"value": "feedback-smtp.us-east-1.amazonses.com",
"priority": 10
},
"mxStatus": "pending",
"mailFromDomain": "rp.mail.example.com"
},
"dkim": {
"type": "byodkim",
"status": "pending",
"diagnostic": null
},
"spf": {
"status": "pending",
"record": {
"name": "rp.mail.example.com",
"value": "v=spf1 include:amazonses.com ~all"
},
"diagnostic": null
},
"mailFrom": {
"status": "pending",
"domain": "rp.mail.example.com",
"mxRecord": {
"name": "rp.mail.example.com",
"value": "feedback-smtp.us-east-1.amazonses.com",
"priority": 10
},
"diagnostic": null
},
"bounceRecords": {
"style": "mx_txt",
"cnameRecord": null,
"status": "pending",
"diagnostic": null
},
"appleEmailSources": ["rp.mail.example.com", "example.com"],
"tracking": {
"policy": "legacy",
"required": false,
"hostname": null,
"status": null,
"ready": false,
"error": null,
"cnameRecord": null
},
"lastVerifiedAt": null,
"nextVerificationAt": null,
"createdAt": "2026-07-13T12:00:00.000Z",
"message": "Domain already exists"
}
}
{
"success": false,
"error": "Invalid domain"
}
{
"success": false,
"error": "Return path and tracking subdomains must be different."
}
{
"success": false,
"error": "Unauthorized"
}
{
"success": false,
"code": "DOMAIN_ALREADY_CONFIGURED",
"error": "Domain already configured",
"title": "Domain already configured",
"description": "The domain \"mail.example.com\" is already configured as a sending domain in Sequenzy. Sending domains are globally unique, so the same domain cannot be added to another company.",
"resolution": "Call list_websites for the current company. If the domain is listed, use check_website for its DNS status. If it is not listed, it belongs to another company; the API, CLI and MCP cannot move or remove it. Ask the user whether to use a different sending domain, or have an owner remove it from the other company in the Sequenzy dashboard (Settings > Domain) and then add it here. Removal deletes the domain's senders and requires publishing a new DKIM record and verifying DNS again.",
"docsUrl": "https://docs.sequenzy.com/api-reference/websites/create",
"details": {
"domain": "mail.example.com"
}
}
{
"success": false,
"error": "Failed to create domain"
}
⌘I
Add Sending Domain
curl --request POST \
--url https://api.sequenzy.com/api/v1/websites \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"domain": "<string>",
"mailFromPrefix": "<string>",
"trackingPrefix": "<string>"
}
'import requests
url = "https://api.sequenzy.com/api/v1/websites"
payload = {
"domain": "<string>",
"mailFromPrefix": "<string>",
"trackingPrefix": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({domain: '<string>', mailFromPrefix: '<string>', trackingPrefix: '<string>'})
};
fetch('https://api.sequenzy.com/api/v1/websites', 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.sequenzy.com/api/v1/websites",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'domain' => '<string>',
'mailFromPrefix' => '<string>',
'trackingPrefix' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.sequenzy.com/api/v1/websites"
payload := strings.NewReader("{\n \"domain\": \"<string>\",\n \"mailFromPrefix\": \"<string>\",\n \"trackingPrefix\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.sequenzy.com/api/v1/websites")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"domain\": \"<string>\",\n \"mailFromPrefix\": \"<string>\",\n \"trackingPrefix\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.sequenzy.com/api/v1/websites")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"domain\": \"<string>\",\n \"mailFromPrefix\": \"<string>\",\n \"trackingPrefix\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"website": {
"id": "domain_abc123",
"domain": "mail.example.com",
"status": "not_started",
"dnsVerified": false,
"readyToSend": false,
"readiness": {
"status": "setup_required",
"reason": "dns_not_started"
},
"dnsRecords": {
"dkimType": "byodkim",
"byodkimRecord": {
"name": "sq1._domainkey.mail.example.com",
"value": "p=PUBLIC_KEY"
},
"byodkimStatus": "pending",
"platformDnsRecords": [
{
"purpose": "dkim",
"type": "CNAME",
"name": "sq1._domainkey.mail.example.com",
"value": "sq1.k7f3q2ab.d.sequenzydns.com",
"required": true,
"status": "pending"
},
{
"purpose": "dkim_spare",
"type": "CNAME",
"name": "sq2._domainkey.mail.example.com",
"value": "sq2.k7f3q2ab.d.sequenzydns.com",
"required": false,
"status": "pending"
},
{
"purpose": "ses_return_path",
"type": "CNAME",
"name": "rp2.mail.example.com",
"value": "r2.k7f3q2ab.d.sequenzydns.com",
"required": false,
"status": "pending"
}
],
"spfRecord": {
"name": "rp.mail.example.com",
"value": "v=spf1 include:spf.sequenzydns.com ~all"
},
"spfStatus": "pending",
"mxRecord": {
"name": "rp.mail.example.com",
"value": "bounce.sequenzydns.com",
"priority": 10
},
"mxStatus": "pending",
"dmarcRecord": {
"name": "_dmarc.example.com",
"suggestedValue": "v=DMARC1; p=none;"
},
"dmarcStatus": "pending",
"mailFromDomain": "rp.mail.example.com",
"returnPathCnameRecord": {
"name": "rp.mail.example.com",
"value": "r1.k7f3q2ab.d.sequenzydns.com"
},
"returnPathCnameStatus": "pending",
"trackingRecord": {
"name": "links.mail.example.com",
"value": "links1.sequenzydns.com"
},
"trackingStatus": "not_started"
},
"dkim": {
"type": "byodkim",
"status": "pending",
"diagnostic": null
},
"spf": {
"status": "pending",
"record": {
"name": "rp.mail.example.com",
"value": "v=spf1 include:spf.sequenzydns.com ~all"
},
"diagnostic": null
},
"mailFrom": {
"status": "pending",
"mxRecord": {
"name": "rp.mail.example.com",
"value": "bounce.sequenzydns.com",
"priority": 10
},
"diagnostic": null
},
"bounceRecords": {
"style": "cname",
"cnameRecord": {
"name": "rp.mail.example.com",
"value": "r1.k7f3q2ab.d.sequenzydns.com"
},
"status": "pending",
"diagnostic": null
},
"tracking": {
"policy": "legacy",
"required": false,
"hostname": "links.mail.example.com",
"status": "not_started",
"ready": false,
"error": null,
"cnameRecord": {
"type": "CNAME",
"name": "links.mail.example.com",
"value": "links1.sequenzydns.com"
}
},
"lastVerifiedAt": null,
"nextVerificationAt": null,
"createdAt": "2026-07-23T12:00:00.000Z",
"message": "Domain added. Configure DNS records; sending becomes available once DNS is verified and activation finishes."
}
}
{
"success": true,
"website": {
"id": "domain_abc123",
"domain": "mail.example.com",
"status": "not_started",
"dnsRecords": {
"dkimType": "byodkim",
"byodkimRecord": {
"name": "sequenzy._domainkey.mail.example.com",
"value": "p=PUBLIC_KEY"
},
"byodkimStatus": "pending",
"spfRecord": {
"name": "rp.mail.example.com",
"value": "v=spf1 include:amazonses.com ~all"
},
"spfStatus": "pending",
"mxRecord": {
"name": "rp.mail.example.com",
"value": "feedback-smtp.us-east-1.amazonses.com",
"priority": 10
},
"mxStatus": "pending",
"mailFromDomain": "rp.mail.example.com"
},
"dkim": {
"type": "byodkim",
"status": "pending",
"diagnostic": null
},
"spf": {
"status": "pending",
"record": {
"name": "rp.mail.example.com",
"value": "v=spf1 include:amazonses.com ~all"
},
"diagnostic": null
},
"mailFrom": {
"status": "pending",
"domain": "rp.mail.example.com",
"mxRecord": {
"name": "rp.mail.example.com",
"value": "feedback-smtp.us-east-1.amazonses.com",
"priority": 10
},
"diagnostic": null
},
"bounceRecords": {
"style": "mx_txt",
"cnameRecord": null,
"status": "pending",
"diagnostic": null
},
"appleEmailSources": ["rp.mail.example.com", "example.com"],
"tracking": {
"policy": "legacy",
"required": false,
"hostname": null,
"status": null,
"ready": false,
"error": null,
"cnameRecord": null
},
"lastVerifiedAt": null,
"nextVerificationAt": null,
"createdAt": "2026-07-13T12:00:00.000Z",
"message": "Domain already exists"
}
}
{
"success": false,
"error": "Invalid domain"
}
{
"success": false,
"error": "Return path and tracking subdomains must be different."
}
{
"success": false,
"error": "Unauthorized"
}
{
"success": false,
"code": "DOMAIN_ALREADY_CONFIGURED",
"error": "Domain already configured",
"title": "Domain already configured",
"description": "The domain \"mail.example.com\" is already configured as a sending domain in Sequenzy. Sending domains are globally unique, so the same domain cannot be added to another company.",
"resolution": "Call list_websites for the current company. If the domain is listed, use check_website for its DNS status. If it is not listed, it belongs to another company; the API, CLI and MCP cannot move or remove it. Ask the user whether to use a different sending domain, or have an owner remove it from the other company in the Sequenzy dashboard (Settings > Domain) and then add it here. Removal deletes the domain's senders and requires publishing a new DKIM record and verifying DNS again.",
"docsUrl": "https://docs.sequenzy.com/api-reference/websites/create",
"details": {
"domain": "mail.example.com"
}
}
{
"success": false,
"error": "Failed to create domain"
}