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>"
}
'import requests
url = "https://api.sequenzy.com/api/v1/websites"
payload = { "domain": "<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>'})
};
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>'
]),
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}")
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}")
.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}"
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": "sequenzy._domainkey.mail.example.com",
"value": "p=PUBLIC_KEY"
},
"byodkimStatus": "pending",
"spfRecord": {
"name": "send.mail.example.com",
"value": "v=spf1 include:spf.sequenzydns.com ~all"
},
"spfStatus": "pending",
"mxRecord": {
"name": "send.mail.example.com",
"value": "bounce.sequenzydns.com",
"priority": 10
},
"mxStatus": "pending",
"dmarcRecord": {
"name": "_dmarc.example.com",
"suggestedValue": "v=DMARC1; p=none;"
},
"dmarcStatus": "pending",
"mailFromDomain": "send.mail.example.com"
},
"dkim": {
"type": "byodkim",
"status": "pending",
"diagnostic": null
},
"spf": {
"status": "pending",
"record": {
"name": "send.mail.example.com",
"value": "v=spf1 include:spf.sequenzydns.com ~all"
},
"diagnostic": null
},
"mailFrom": {
"status": "pending",
"mxRecord": {
"name": "send.mail.example.com",
"value": "bounce.sequenzydns.com",
"priority": 10
},
"diagnostic": null
},
"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": "send.mail.example.com",
"value": "v=spf1 include:amazonses.com ~all"
},
"spfStatus": "pending",
"mxRecord": {
"name": "send.mail.example.com",
"value": "feedback-smtp.us-east-1.amazonses.com",
"priority": 10
},
"mxStatus": "pending",
"inboundMxRecord": {
"name": "inbound.mail.example.com",
"value": "inbound-smtp.us-east-1.amazonaws.com",
"priority": 10
},
"inboundMxStatus": "pending",
"mailFromDomain": "send.mail.example.com"
},
"dkim": {
"type": "byodkim",
"status": "pending",
"diagnostic": null
},
"spf": {
"status": "pending",
"record": {
"name": "send.mail.example.com",
"value": "v=spf1 include:amazonses.com ~all"
},
"diagnostic": null
},
"mailFrom": {
"status": "pending",
"domain": "send.mail.example.com",
"mxRecord": {
"name": "send.mail.example.com",
"value": "feedback-smtp.us-east-1.amazonses.com",
"priority": 10
},
"diagnostic": null
},
"appleEmailSources": ["send.mail.example.com", "example.com"],
"lastVerifiedAt": null,
"nextVerificationAt": null,
"createdAt": "2026-07-13T12:00:00.000Z",
"message": "Domain already exists"
}
}
{
"success": false,
"error": "Invalid domain"
}
{
"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 every record
returned in
MCP clients should call
website.dnsRecords before running verification. Newly added
domains always return the unified Sequenzy record set (Sequenzy MX/SPF plus
required DMARC). 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 and inbound-reply shape.
For a legacy custom reply domain, run
Verify Sending Domain after publishing its
inbound MX. If that reply hostname needs separate ownership verification, the
result includes dnsRecords.inboundVerificationRecord. Publish its TXT and
verify again. Sending readiness and reply-routing readiness are separate;
use dnsRecords.inboundRoutingStatus for replies. Existing reply addresses
remain unchanged.
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.
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"}'
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": "sequenzy._domainkey.mail.example.com",
"value": "p=PUBLIC_KEY"
},
"byodkimStatus": "pending",
"spfRecord": {
"name": "send.mail.example.com",
"value": "v=spf1 include:spf.sequenzydns.com ~all"
},
"spfStatus": "pending",
"mxRecord": {
"name": "send.mail.example.com",
"value": "bounce.sequenzydns.com",
"priority": 10
},
"mxStatus": "pending",
"dmarcRecord": {
"name": "_dmarc.example.com",
"suggestedValue": "v=DMARC1; p=none;"
},
"dmarcStatus": "pending",
"mailFromDomain": "send.mail.example.com"
},
"dkim": {
"type": "byodkim",
"status": "pending",
"diagnostic": null
},
"spf": {
"status": "pending",
"record": {
"name": "send.mail.example.com",
"value": "v=spf1 include:spf.sequenzydns.com ~all"
},
"diagnostic": null
},
"mailFrom": {
"status": "pending",
"mxRecord": {
"name": "send.mail.example.com",
"value": "bounce.sequenzydns.com",
"priority": 10
},
"diagnostic": null
},
"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": "send.mail.example.com",
"value": "v=spf1 include:amazonses.com ~all"
},
"spfStatus": "pending",
"mxRecord": {
"name": "send.mail.example.com",
"value": "feedback-smtp.us-east-1.amazonses.com",
"priority": 10
},
"mxStatus": "pending",
"inboundMxRecord": {
"name": "inbound.mail.example.com",
"value": "inbound-smtp.us-east-1.amazonaws.com",
"priority": 10
},
"inboundMxStatus": "pending",
"mailFromDomain": "send.mail.example.com"
},
"dkim": {
"type": "byodkim",
"status": "pending",
"diagnostic": null
},
"spf": {
"status": "pending",
"record": {
"name": "send.mail.example.com",
"value": "v=spf1 include:amazonses.com ~all"
},
"diagnostic": null
},
"mailFrom": {
"status": "pending",
"domain": "send.mail.example.com",
"mxRecord": {
"name": "send.mail.example.com",
"value": "feedback-smtp.us-east-1.amazonses.com",
"priority": 10
},
"diagnostic": null
},
"appleEmailSources": ["send.mail.example.com", "example.com"],
"lastVerifiedAt": null,
"nextVerificationAt": null,
"createdAt": "2026-07-13T12:00:00.000Z",
"message": "Domain already exists"
}
}
{
"success": false,
"error": "Invalid domain"
}
{
"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>"
}
'import requests
url = "https://api.sequenzy.com/api/v1/websites"
payload = { "domain": "<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>'})
};
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>'
]),
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}")
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}")
.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}"
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": "sequenzy._domainkey.mail.example.com",
"value": "p=PUBLIC_KEY"
},
"byodkimStatus": "pending",
"spfRecord": {
"name": "send.mail.example.com",
"value": "v=spf1 include:spf.sequenzydns.com ~all"
},
"spfStatus": "pending",
"mxRecord": {
"name": "send.mail.example.com",
"value": "bounce.sequenzydns.com",
"priority": 10
},
"mxStatus": "pending",
"dmarcRecord": {
"name": "_dmarc.example.com",
"suggestedValue": "v=DMARC1; p=none;"
},
"dmarcStatus": "pending",
"mailFromDomain": "send.mail.example.com"
},
"dkim": {
"type": "byodkim",
"status": "pending",
"diagnostic": null
},
"spf": {
"status": "pending",
"record": {
"name": "send.mail.example.com",
"value": "v=spf1 include:spf.sequenzydns.com ~all"
},
"diagnostic": null
},
"mailFrom": {
"status": "pending",
"mxRecord": {
"name": "send.mail.example.com",
"value": "bounce.sequenzydns.com",
"priority": 10
},
"diagnostic": null
},
"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": "send.mail.example.com",
"value": "v=spf1 include:amazonses.com ~all"
},
"spfStatus": "pending",
"mxRecord": {
"name": "send.mail.example.com",
"value": "feedback-smtp.us-east-1.amazonses.com",
"priority": 10
},
"mxStatus": "pending",
"inboundMxRecord": {
"name": "inbound.mail.example.com",
"value": "inbound-smtp.us-east-1.amazonaws.com",
"priority": 10
},
"inboundMxStatus": "pending",
"mailFromDomain": "send.mail.example.com"
},
"dkim": {
"type": "byodkim",
"status": "pending",
"diagnostic": null
},
"spf": {
"status": "pending",
"record": {
"name": "send.mail.example.com",
"value": "v=spf1 include:amazonses.com ~all"
},
"diagnostic": null
},
"mailFrom": {
"status": "pending",
"domain": "send.mail.example.com",
"mxRecord": {
"name": "send.mail.example.com",
"value": "feedback-smtp.us-east-1.amazonses.com",
"priority": 10
},
"diagnostic": null
},
"appleEmailSources": ["send.mail.example.com", "example.com"],
"lastVerifiedAt": null,
"nextVerificationAt": null,
"createdAt": "2026-07-13T12:00:00.000Z",
"message": "Domain already exists"
}
}
{
"success": false,
"error": "Invalid domain"
}
{
"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"
}