Enroll a domain
POST /v1/dmarc/domainsRequest
Section titled “Request”| Field | Type | Required | Description |
|---|---|---|---|
domain |
string | Yes | The domain to monitor, e.g. example.com. |
org_id |
string | No | Your own grouping key, echoed back on reads. |
is_subdomain |
boolean | No | Mark this as a subdomain enrollment. |
parent_domain |
string | No | The parent, when is_subdomain is true. |
ruf_enabled |
boolean | No | Also provision a forensic (RUF) address. |
tlsrpt_enabled |
boolean | No | Also provision a TLS-RPT address. |
retention_days |
integer | No | How long to keep reports (1–3650). |
curl -X POST https://api.tryverifyemail.com/v1/dmarc/domains \ -H "Authorization: Bearer sk_your_api_key" \ -H "Content-Type: application/json" \ -d '{"domain": "example.com"}'const res = await fetch("https://api.tryverifyemail.com/v1/dmarc/domains", { method: "POST", headers: { Authorization: `Bearer ${process.env.VERIFYEMAIL_API_KEY}`, "Content-Type": "application/json", }, body: JSON.stringify({ domain: "example.com" }),});
const { domain, dns_records } = await res.json();import os, requests
res = requests.post( "https://api.tryverifyemail.com/v1/dmarc/domains", headers={"Authorization": f"Bearer {os.environ['VERIFYEMAIL_API_KEY']}"}, json={"domain": "example.com"},)
payload = res.json()Response
Section titled “Response”201 Created on first enrollment.
{ "created": true, "domain": { "id": "665f1c2a9b4e7d0012ab34cd", "domain": "example.com", "status": "pending", "is_subdomain": false, "parent_domain": null, "org_id": null, "ruf_enabled": false, "tlsrpt_enabled": false, "retention_days": 90, "published_policy": null, "reporting": { "rua": "a1b2c3d4e5f6...@dmarc.tryverifyemail.com", "ruf": null, "tlsrpt": null }, "created_at": "2026-08-19T10:04:11.000Z", "updated_at": "2026-08-19T10:04:11.000Z" }, "dns_records": [ { "record": "dmarc", "host": "_dmarc.example.com", "type": "TXT", "action": "create", "value": "v=DMARC1; p=none; rua=mailto:a1b2c3d4e5f6...@dmarc.tryverifyemail.com", "current": null } ]}The DNS records
Section titled “The DNS records”dns_records is generate-or-merge, not a blind template. We read whatever is
currently published at _dmarc.<domain> first:
"action": "create"— nothing is published yet.valueis a safe monitoring-only starter (p=none), so enrolling cannot affect delivery."action": "update"— a DMARC record already exists.valueis that record with our reporting address spliced into itsrua=list and every one of your existing policy tags preserved (p,pct,sp,adkim,aspf).currentshows what is published today so you can diff before applying.
Publish value verbatim at host.
See also
Section titled “See also”- Check verification — the next step once the records are published
- Preview the DNS records again
- DMARC monitoring — overview