Skip to main content
Required permission: Domains → Read or Write for the domain; Mailboxes → Write to create an address. The whole sequence is three calls and a wait for DNS:
1

Enrol the domain

POST /v1/domains returns the records to publish.
2

Publish the DNS, then poll

GET /v1/domains/{id} reports outstanding — how many records are still missing. Zero means it is done.
3

Create addresses

POST /v1/mailboxes works once status is verified.

Enrol a domain

The dns array is the point of this endpoint. Enrolling is the easy half; publishing DNS is the work, and an answer that said only "pending" would leave you with nothing to do next. Write those records to your DNS provider verbatim.
satisfied: false with last_checked_at: null means “not looked at yet”, not “missing”. They are different facts and only the second is a problem.DKIM records appear once Amazon SES has issued them, which is why a freshly enrolled domain lists four records and a checked one usually lists six.

Watch it verify

Poll the single-domain call and watch outstanding fall to zero. DNS propagation is minutes to hours depending on your provider and TTL; there is no webhook for it yet, so poll on a sensible interval rather than a tight loop. Two verification timestamps are reported separately, because they fail for different reasons and are fixed by different records: A domain can be owned and still unable to receive. Collapsing the two into one “verified” flag would send you looking at the wrong record. The ownership token is returned on GET /v1/domains/{id} for as long as the challenge is live — so losing the POST response is recoverable, rather than forcing you to delete the domain and enrol it again.

Remove a domain

Refused while the domain still has mailboxes or aliases, and the answer says which — removing it first would orphan addresses that are still receiving mail. Remove those, then the domain.

Create an address

local_part is lowercase letters, digits, dot, hyphen and underscore, starting and ending alphanumeric, no consecutive dots, at most 64 characters. No plus — plus-addressing is a suffix on an existing mailbox, not a name to own.
A key can only create Smart mailboxes.A Private mailbox is encrypted to a key that only its owner’s browser can generate, and the server never holds it. Creating one from an API would leave an address stuck in provisioning that nobody can finish, because finishing it means a person at a browser completing enrollment. It is refused rather than made broken.
The domain must be verified and not suspended. Reserved addresses — postmaster, abuse and the other RFC-mandated names — are refused, and the first mailbox on a domain automatically gets postmaster and abuse aliases pointing at it.

Plan limits are the real ceiling

Every plan caps mailboxes and domains, and the database enforces it — so a key cannot create a sixth mailbox on a five-mailbox plan however it asks:
Check GET /v1/usage before a batch rather than discovering the ceiling halfway through one.

Not available yet

Suspending or deleting a mailbox. Both take an address out of service with mail still in it, and the recovery path differs depending on why. They stay in the dashboard. Changing a domain. Nothing about an enrolled domain is editable: the name is its identity, and the status is decided by what is in DNS rather than by anybody asserting it. Remove and re-enrol. Triggering a DNS check. Checks run on a schedule. There is no way to demand one, because a caller in a loop would spend the rate limit re-asking a question whose answer changes with DNS propagation, not with asking.

Errors

See Errors for the full response shape.