Skip to the documentation
API

Retrieve the web app address

The web app address of the workspace, whether people can sign in there, and the DNS records it needs. With none set, `status` is `none` and `domains` lists the verified domains of the workspace.

GET/app-host

Runs the real call on your workspace.

GET /app-host

The web app address of the workspace, whether people can sign in there, and the DNS records it needs. With none set, status is none and domains lists the verified domains of the workspace.

What the web app address is

shell
export OE=https://api.openemail.ukexport AUTH="Authorization: Bearer $NEXTMAIL_API_KEY"

A workspace on a paid plan can open the web app on a subdomain of its own, such as mailbox.acme.com, as well as on openemail.uk. The subdomain can be on one of its verified domains or on any other domain it controls. It is the address the Branded app tab of the workspace’s Customisations page sets, and a workspace has at most one.

Only the members of the workspace, the people who sign in with one of its addresses and anyone with a pending invitation can sign in there, and only they get password reset and verification emails sent from it. It looks like openemail.uk until the workspace sets a logo on its Customisations page, then shows the workspace’s logo, mark and name in place of ours. From then on the emails Nextmail sends them carry the brand and link back to the address. When the address is on a verified domain of the workspace, they also come from noreply@ that domain once its signing records are verified.

It takes one CNAME record, which record spells out. An address that is not on a verified domain of the workspace also takes the TXT record in ownershipRecord, which proves the domain is yours, and nothing is set up for it until that record answers. The address is pending until its records answer and its certificate is issued, and active after that. On the free plan it is kept but paused: paused is true and nobody can sign in there until the workspace is on a paid plan again.

Example

Needs domains:read.

curl
curl "$OE/app-host" -H "$AUTH"
Response
{  "object": "app_host",  "id": "ahost_3f9c2a71d0b84e56a1c7f2e9",  "host": "mailbox.acme.com",  "domainId": "b3e1f0a4-6c2d-4e8a-9f17-2d5c8a0b4e6f",  "domain": "acme.com",  "status": "active",  "active": true,  "paused": false,  "target": "cname.openemail.uk",  "record": {    "type": "CNAME",    "name": "mailbox.acme.com",    "value": "cname.openemail.uk"  },  "ownershipRecord": null,  "ownershipVerified": true,  "error": null,  "checkedAt": "2026-10-01T09:12:30.000Z",  "verifiedAt": "2026-10-01T09:04:11.000Z",  "available": true,  "paidPlan": true,  "domains": ["acme.com"],  "suggested": "mailbox.acme.com"}

Reading it checks the address again when its last check is more than 15 seconds old, so polling this route is how to wait for active to turn true.

active is true only when status is active and the workspace is on a paid plan. paused is true when an address is set and the workspace is on the free plan.

Reference