Get an email sender domain
GET /v1/email-sender-domains/{sender_domain_id} · permission email-sender-domains:read · all plans
Returns a sender domain: its status, the results of the last DNS check and the DNS records to publish. The ETag header carries the version; send it as If-Match when you delete the domain.
Request
| Field | Type | Required | Description |
|---|---|---|---|
sender_domain_id |
string | yes | Sender domain ID (sdom_…). |
No request body.
Response
200 OK with the sender domain and ETag set to its version.
| Field | Type | Description |
|---|---|---|
id |
string | Sender domain ID (sdom_…). |
domain |
string | The domain as an IDNA 2008 A-label, lowercase, without a trailing dot. |
status |
string | pending_dns (waiting for the DNS records), verified (ready to send), degraded (the records have been failing for 72 hours; the environment fell back to platform sending) or disabled (disabled by the platform). |
active_selector |
string | DKIM selector used for signing: akp1 or akp2. |
dkim_status |
string or null | Last check of the two DKIM CNAMEs (the worse of the two): ok, missing, wrong_target or lookup_failed; null before the first check. |
return_path_status |
string or null | Last check of the return-path CNAME, same codes; null before the first check. |
dmarc_alignment |
string or null | DMARC result of the last check: aligned, not_aligned, no_record, invalid_record or lookup_failed. DMARC is not required. |
last_checked_at |
string or null | Time of the last check. |
failing_since |
string or null | First failed check of a verified domain; when it reaches 72 hours the domain becomes degraded. |
degraded_since |
string or null | When the domain became degraded. |
records |
array | DNS records to publish: type (CNAME or TXT), name, value and required. The two DKIM CNAMEs and the return-path CNAME are required; when the last check found no _dmarc record a DMARC suggestion (v=DMARC1; p=none) is added with required: false. |
version |
integer | Domain version, the same as the ETag; it increases on every write, checks included. |
created_at |
string | Creation time. |
updated_at |
string | Time of the last change. |
{
"id": "sdom_01k7r9m3q5t8v2w4x6y8z0a2b4",
"domain": "mail.example.com",
"status": "pending_dns",
"active_selector": "akp1",
"dkim_status": null,
"return_path_status": null,
"dmarc_alignment": null,
"last_checked_at": null,
"failing_since": null,
"degraded_since": null,
"records": [
{
"type": "CNAME",
"name": "akp1._domainkey.mail.example.com",
"value": "akp1.sdom_01k7r9m3q5t8v2w4x6y8z0a2b4.dkim.eu.keenauth.app",
"required": true
},
{
"type": "CNAME",
"name": "akp2._domainkey.mail.example.com",
"value": "akp2.sdom_01k7r9m3q5t8v2w4x6y8z0a2b4.dkim.eu.keenauth.app",
"required": true
},
{
"type": "CNAME",
"name": "rp.mail.example.com",
"value": "rp.eu.mail.keenauth.app",
"required": true
}
],
"version": 1,
"created_at": "2026-10-19T09:00:00Z",
"updated_at": "2026-10-19T09:00:00Z"
}
Errors
| HTTP | code | When |
|---|---|---|
| 404 | not_found |
The sender domain does not exist, belongs to another environment or the ID is malformed. |
| 401 | unauthenticated |
The credential is missing, invalid or revoked. |
| 403 | insufficient_permissions |
The credential lacks the required permission. |
| 429 | rate_limited |
The rate limit was exceeded; retry after the Retry-After period. |
| 503 | service_unavailable |
A dependency is temporarily unavailable; retry after the Retry-After period. |
Example
curl https://api.eu.keenauth.com/v1/email-sender-domains/sdom_01k7r9m3q5t8v2w4x6y8z0a2b4 \
-H "Authorization: Bearer $KEENAUTH_SECRET_KEY"
CLI: keenauth email-sender-domains get sdom_01k7r9m3q5t8v2w4x6y8z0a2b4