Get a Domain
curl --request GET \
--url https://cloudapi.mailercloud.com/v1/domains/{id} \
--header 'Authorization: <api-key>'import requests
url = "https://cloudapi.mailercloud.com/v1/domains/{id}"
headers = {"Authorization": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: '<api-key>'}};
fetch('https://cloudapi.mailercloud.com/v1/domains/{id}', 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://cloudapi.mailercloud.com/v1/domains/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://cloudapi.mailercloud.com/v1/domains/{id}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}{
"id": "zjAKXb",
"domain": "example.com",
"status": "failed",
"open_tracking": false,
"created_at": "2026-10-13T09:43:00Z",
"records": [
{
"purpose": "tracking",
"type": "CNAME",
"host": "mc.example.com",
"value": "mc3035n.mlrcloud.com",
"status": "verified",
"error_message": null
},
{
"purpose": "dkim",
"type": "CNAME",
"host": "k1._domainkey.example.com",
"value": "dkim.mlrcloud.com",
"status": "verified",
"error_message": null
},
{
"purpose": "dkim",
"type": "CNAME",
"host": "k2._domainkey.example.com",
"value": "dkim2.mlrcloud.com",
"status": "pending",
"error_message": null
},
{
"purpose": "image",
"type": "CNAME",
"host": "img3035n.example.com",
"value": "img3035n.mlrcloud.com",
"status": "verified",
"error_message": null
},
{
"purpose": "dmarc",
"type": "TXT",
"host": "_dmarc.example.com",
"value": "v=DMARC1; p=reject; sp=none; adkim=s; aspf=s; rua=mailto:dmarc@mlrcloud.com; ruf=mailto:dmarc@mlrcloud.com;",
"status": "error",
"error_message": "More than one dmarc TXT record found in your provider"
}
]
}{
"errors": [
{
"field": "",
"message": "Authorization failed"
}
]
}{
"errors": [
{
"field": "id",
"message": "Domain not found"
}
]
}{
"message": "Too Many Requests"
}{
"message": "Sorry, we are experiencing some technical difficulties. Please try after some time."
}Get a Domain
Get one domain with its DNS records and the status of each record — the same records as Account Settings → Domains in the app.
The statuses come from the last DNS check (domains are re-checked automatically). Use the record status and error_message to see exactly which DNS record still needs to be fixed.
Tracking host (mc.)
- For a domain such as
example.com, the tracking record’s host ismc.example.com. - For a subdomain that already exists in your DNS, the host gets a
mc-prefix instead, e.g.mc-news.example.com. mc.example.comis never treated asexample.com. If it is not used as a tracking host, it can be added as its own domain: it keeps its full name and gets its own records (tracking hostmc-mc.example.com).- If
mc.example.comis already the tracking host of an added domain (e.g.example.comwas added first), it cannot be added — the API returns 400 “This domain is already in use or linked elsewhere”.
Domain status:
verified— the domain is authenticated and ready to send.not_verified— the DNS records are not all in place yet (or not checked yet).failed— at least one DNS record was found but is wrong (see the record’serror_messagein Get a Domain).
GET
/
domains
/
{id}
Get a Domain
curl --request GET \
--url https://cloudapi.mailercloud.com/v1/domains/{id} \
--header 'Authorization: <api-key>'import requests
url = "https://cloudapi.mailercloud.com/v1/domains/{id}"
headers = {"Authorization": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: '<api-key>'}};
fetch('https://cloudapi.mailercloud.com/v1/domains/{id}', 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://cloudapi.mailercloud.com/v1/domains/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://cloudapi.mailercloud.com/v1/domains/{id}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}{
"id": "zjAKXb",
"domain": "example.com",
"status": "failed",
"open_tracking": false,
"created_at": "2026-10-13T09:43:00Z",
"records": [
{
"purpose": "tracking",
"type": "CNAME",
"host": "mc.example.com",
"value": "mc3035n.mlrcloud.com",
"status": "verified",
"error_message": null
},
{
"purpose": "dkim",
"type": "CNAME",
"host": "k1._domainkey.example.com",
"value": "dkim.mlrcloud.com",
"status": "verified",
"error_message": null
},
{
"purpose": "dkim",
"type": "CNAME",
"host": "k2._domainkey.example.com",
"value": "dkim2.mlrcloud.com",
"status": "pending",
"error_message": null
},
{
"purpose": "image",
"type": "CNAME",
"host": "img3035n.example.com",
"value": "img3035n.mlrcloud.com",
"status": "verified",
"error_message": null
},
{
"purpose": "dmarc",
"type": "TXT",
"host": "_dmarc.example.com",
"value": "v=DMARC1; p=reject; sp=none; adkim=s; aspf=s; rua=mailto:dmarc@mlrcloud.com; ruf=mailto:dmarc@mlrcloud.com;",
"status": "error",
"error_message": "More than one dmarc TXT record found in your provider"
}
]
}{
"errors": [
{
"field": "",
"message": "Authorization failed"
}
]
}{
"errors": [
{
"field": "id",
"message": "Domain not found"
}
]
}{
"message": "Too Many Requests"
}{
"message": "Sorry, we are experiencing some technical difficulties. Please try after some time."
}Authorizations
Your Mailercloud API key (plain text, no Bearer prefix). Create keys in Settings → API.
Path Parameters
Domain ID (from Add a Domain or List Domains)
Response
OK
Domain ID
Domain name
Domain status:
verified— the domain is authenticated and ready to send.not_verified— the DNS records are not all in place yet (or not checked yet).failed— at least one DNS record was found but is wrong (see the record'serror_messagein Get a Domain).
Available options:
verified, not_verified, failed Open tracking for Email API / SMTP sends from this domain. No effect on marketing campaigns.
When the domain was added (ISO 8601, UTC)
Show child attributes
Show child attributes