Retrieve a domain
Adds the addresses on it, every DNS record the domain needs with what the last check found, and the DMARC reading.
Runs the real call on your workspace.
GET /domains/{id}
Adds the addresses on it, every DNS record the domain needs with what the last check found, and the DMARC reading.
Example
Needs domains:read.
curl "$OE/domains/b3e1f0a4-6c2d-4e8a-9f17-2d5c8a0b4e6f" -H "$AUTH"{ "object": "domain", "id": "b3e1f0a4-6c2d-4e8a-9f17-2d5c8a0b4e6f", "domain": "acme.com", "receiving": { "verified": true, "verifiedAt": "2026-08-14T10:02:00.000Z", "catchAll": false, "lastCheckedAt": "2026-08-29T06:00:00.000Z", "error": null }, "sending": { "status": "verified", "canSend": true, "checkedAt": "2026-08-29T06:00:00.000Z", "error": null, "note": "Mail from this domain is signed and can be sent." }, "tracking": { "host": "links.acme.com", "status": "active", "active": true, "target": "oelinks3f9a1c7e2b8d4a60.edge.openemail.uk", "record": { "type": "CNAME", "name": "links.acme.com", "value": "oelinks3f9a1c7e2b8d4a60.edge.openemail.uk" }, "checkedAt": "2026-08-29T06:10:00.000Z", "verifiedAt": "2026-08-29T06:10:00.000Z", "error": null }, "storage": { "host": "files.acme.com", "status": "active", "active": true, "target": "oefiles81c40d6b2f7e9a35.edge.openemail.uk", "record": { "type": "CNAME", "name": "files.acme.com", "value": "oefiles81c40d6b2f7e9a35.edge.openemail.uk" }, "checkedAt": "2026-08-29T06:10:00.000Z", "verifiedAt": "2026-08-29T06:10:00.000Z", "error": null }, "logo": { "url": "https://api.openemail.uk/bimi/acme.com/logo.svg", "record": { "type": "TXT", "name": "default._bimi.acme.com", "value": "v=BIMI1; l=https://api.openemail.uk/bimi/acme.com/logo.svg; a=https://api.openemail.uk/bimi/acme.com/certificate.pem;", "priority": null, "purpose": "Shows your logo next to mail from this domain in inboxes that support BIMI.", "status": "found" }, "certificate": { "url": "https://api.openemail.uk/bimi/acme.com/certificate.pem", "mark": "verified", "expiresAt": "2027-08-14T23:59:59.000Z", "domains": ["acme.com"], "issuer": "DigiCert, Inc." }, "matchesCertificate": true }, "dmarcPolicy": "quarantine", "senderName": "Acme", "addresses": [ { "address": "[email protected]", "enabled": true }, { "address": "[email protected]", "enabled": false } ], "createdAt": "2026-08-14T09:55:11.000Z", "records": [ { "type": "MX", "name": "acme.com", "value": "inbound.mail.example", "priority": 10, "purpose": null, "status": "found" }, { "type": "TXT", "name": "acme.com", "value": "v=spf1 include:_spf.openemail.uk ~all", "priority": null, "purpose": null, "status": "found" }, { "type": "TXT", "name": "_openemail-challenge.acme.com", "value": "openemail-verify-4f1c9a2b7e8d6053a1c49e2b7d0c8f36", "priority": null, "purpose": "Proves you own this domain", "status": "found" }, { "type": "TXT", "name": "_dmarc.acme.com", "value": "v=DMARC1; p=quarantine", "priority": null, "purpose": "Tells receivers to keep mail that fails its checks out of the inbox. Inboxes only show your logo at this policy.", "status": "found" }, { "type": "TXT", "name": "openemail._domainkey.acme.com", "value": "p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAx7q2…", "priority": null, "purpose": "Lets us sign mail as this domain", "status": "found" }, { "type": "MX", "name": "bounce.acme.com", "value": "feedback.mail.example", "priority": 10, "purpose": "Puts the return path on your own domain. Without it, recipients see your mail as sent through the mail service rather than by you.", "status": "found" }, { "type": "TXT", "name": "bounce.acme.com", "value": "v=spf1 include:_spf.openemail.uk ~all", "priority": null, "purpose": "Authorises the return path above. Same value as the record on your domain", "status": "found" } ], "dmarc": { "stage": "quarantine", "record": "v=DMARC1; p=quarantine", "issues": [], "alignmentPossible": true, "caveat": "Anything else sending as this domain, such as a help desk or your own servers, must be listed in SPF or signed separately before you tighten this." }}A disabled address stops being deliverable. Mail to it is refused at SMTP time, so the sender gets a bounce rather than silence.
The records to publish
records lists every DNS record the domain needs. Publish each one at your DNS host exactly as the response gives it: type, name and value, and priority on an MX. The values are specific to your domain and can change when its signing is set up again, so read them from the response rather than from this page, where the hosts are examples.
Each record
typestring- `MX`, `TXT` or `CNAME`.
namestring- The full name to publish the record at, such as `_dmarc.acme.com`.
valuestring- The value to publish, exactly as given.
prioritynumber | null- The MX priority. Null on every other type.
purposestring | null- A sentence on what the record is for, or null for the records every mail domain needs.
status'found' | 'missing' | null- What the last check saw: `found` when the record answers in public DNS with the right value, `missing` when it does not. Null means it has not been checked yet.
Verification needs the MX and the SPF record on the domain itself and the _openemail-challenge TXT. The DMARC record is recommended. The signing record and the two records on the return-path host are what let mail go out signed as your domain. They are checked once the domain is verified, and sending reports the result.
Reading an unverified domain checks it again when its last check is more than 20 seconds old, and a background sweep checks every unverified domain on its own. To check at once after publishing, call POST /domains/{id}/verify. Subscribe to domain.verified and domain.sending_changed to hear when either state moves instead of polling.
dmarc is null until the domain is verified. Once it is, stage is missing, invalid, monitor, quarantine or reject, record is the policy found, issues lists what is wrong with it, and caveat says what to settle before tightening it.