---
title: "Retrieve a domain"
description: "Adds the addresses that exist on it and whether each is enabled."
url: "https://openemail.uk/docs/api/domains/get"
area: "API"
category: "Mailbox"
---

# Retrieve a domain

Adds the addresses that exist on it and whether each is enabled.

`GET /domains/{id}`

## GET /domains/{id}

Adds the addresses that exist on it and whether each is enabled.

## Example

Needs `domains:read`.

**curl**

```
curl "$OE/domains/b3e1f0a4-6c2d-4e8a-9f17-2d5c8a0b4e6f" -H "$AUTH"
```

**Response**

```
{
  "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
  },
  "addresses": [
    { "address": "billing@acme.com", "enabled": true },
    { "address": "old@acme.com", "enabled": false }
  ],
  "createdAt": "2026-08-14T09:55:11.000Z"
}
```

> A disabled address stops being deliverable. Mail to it is refused at SMTP time, so the sender gets a bounce rather than silence.

## What you cannot do here yet (not built yet)

The writes this resource takes are the custom tracking domain and the custom files domain, both through `PATCH /domains/{id}`. The rest of a domain’s setup is app-only for now.

- Adding a domain, and reading the DNS records to publish. `GET` reports that a domain is unverified but not which record is missing.
- Triggering a re-check of `receiving` or `sending`. Neither has an endpoint, and neither needs one: an hourly sweep re-checks every unverified domain on its own, so publishing the records and leaving them is the whole job. Subscribe to `domain.verified` and `domain.sending_changed` rather than polling `GET /domains`, and you are told the moment either moves. `PATCH /domains/{id}` checks only the tracking domain and the files domain.
- Creating, disabling or routing an address. SHARING one is built, since `POST /members/{userId}/addresses` hands an existing address to somebody at `member` or `viewer` level. It is bringing the address into existence that this resource cannot do.

> All of it exists in the app under Settings → Domains. It is the API surface that is missing, not the capability.
