Domains
Custom domains, DNS records, catch-all.
| Method | Path | Summary |
|---|---|---|
GET | /v0/domains | List Domains |
POST | /v0/domains | Create Domain |
GET | /v0/domains/{domain_id} | Get Domain |
PATCH | /v0/domains/{domain_id} | Update Domain |
DELETE | /v0/domains/{domain_id} | Delete Domain |
GET | /v0/domains/{domain_id}/domain-connect | Get Domain Connect Setup |
POST | /v0/domains/{domain_id}/verify | Verify Domain |
GET | /v0/domains/{domain_id}/zone-file | Get Zone File |
GET | /v0/pods/{pod_id}/domains | List Domains in Pod |
POST | /v0/pods/{pod_id}/domains | Create Domain in Pod |
GET | /v0/pods/{pod_id}/domains/{domain_id} | Get Domain in Pod |
PATCH | /v0/pods/{pod_id}/domains/{domain_id} | Update Domain in Pod |
DELETE | /v0/pods/{pod_id}/domains/{domain_id} | Delete Domain in Pod |
GET | /v0/pods/{pod_id}/domains/{domain_id}/domain-connect | Get Domain Connect Setup in Pod |
POST | /v0/pods/{pod_id}/domains/{domain_id}/verify | Verify Domain in Pod |
GET | /v0/pods/{pod_id}/domains/{domain_id}/zone-file | Get Zone File in Pod |
List Domains
Authentication: Authorization: Bearer <api key> or the dashboard mm_session cookie. Permission: domain_read.
Query parameters
limitintegerpage_tokenstringascendingbooleanResponse
200 A page of domains (application/json)
countintegerRequiredlimitintegernext_page_tokenstringEach item of domains is a DomainItem:
pod_idstringRequireddomain_idstringRequireddomainstringRequiredfeedback_enabledbooleanRequiredinbound_enabledbooleanRequiredsubdomains_enabledbooleanRequiredtracking_enabledbooleanRequiredclient_idstringupdated_atstring (date-time)Requiredcreated_atstring (date-time)Requiredstatus"NOT_STARTED" | "PENDING" | "INVALID" | "FAILED" | "VERIFYING" | "VERIFIED"Requiredreasonstringorganization_idstringRequiredcatch_allbooleanRequiredcatch_all_ttl_secondsintegernameserversstring[]dns_provider"cloudflare" | "route53" | "google" | "vercel" | "namecheap" | "godaddy" | "digitalocean" | "hetzner" | "porkbun" | "other"dns_provider_urlstringdomain_connectobjectverified_atstring (date-time)last_checked_atstring (date-time)Errors
| Status | Meaning |
|---|---|
400 | Invalid request: error.type is validation and error.param names the field. |
401 | Missing, invalid, expired or revoked credential. |
403 | The credential lacks the permission or scope for this request (error.type forbidden), or MachineMail suspended the organization or its sending (account_suspended: error.message says what still works; do not retry or re-register). |
500 | Unexpected server error. |
Error bodies use the error envelope.
Example
Create Domain
Registers the domain and returns the DNS records to publish (status: NOT_STARTED). Publish them, then call Verify Domain. A background worker re-checks PENDING and INVALID domains about every 5 minutes until 7 days after creation; a NOT_STARTED domain is only checked by Verify Domain.
A domain can be registered by one organization only (409), and the shared domain cannot be added (409). Inbox-scoped credentials cannot add domains (403).
allow_conflicting_provider, subdomains_enabled and tracking_enabled are not supported.
Authentication: Authorization: Bearer <api key> or the dashboard mm_session cookie. Permission: domain_create.
Request body
Content type: application/json.
domainstringRequiredfeedback_enabledbooleaninbound_enabledbooleanclient_idstringpod_idstringcatch_allbooleancatch_all_ttl_secondsinteger | nullResponse
200 A domain with this client_id already exists; it is returned unchanged. (application/json)
pod_idstringRequireddomain_idstringRequireddomainstringRequiredfeedback_enabledbooleanRequiredinbound_enabledbooleanRequiredsubdomains_enabledbooleanRequiredtracking_enabledbooleanRequiredclient_idstringupdated_atstring (date-time)Requiredcreated_atstring (date-time)Requiredstatus"NOT_STARTED" | "PENDING" | "INVALID" | "FAILED" | "VERIFYING" | "VERIFIED"Requiredreasonstringorganization_idstringRequiredcatch_allbooleanRequiredcatch_all_ttl_secondsintegernameserversstring[]dns_provider"cloudflare" | "route53" | "google" | "vercel" | "namecheap" | "godaddy" | "digitalocean" | "hetzner" | "porkbun" | "other"dns_provider_urlstringdomain_connectobjectverified_atstring (date-time)last_checked_atstring (date-time)Each item of records is a VerificationRecord:
type"TXT" | "CNAME" | "MX"RequirednamestringRequiredvaluestringRequiredstatus"MISSING" | "INVALID" | "VALID"Requiredpriorityintegerreasonstringpurpose"inbound" | "spf" | "dkim" | "dmarc" | "provider"RequiredrequiredbooleanRequired201 Created (application/json)
pod_idstringRequireddomain_idstringRequireddomainstringRequiredfeedback_enabledbooleanRequiredinbound_enabledbooleanRequiredsubdomains_enabledbooleanRequiredtracking_enabledbooleanRequiredclient_idstringupdated_atstring (date-time)Requiredcreated_atstring (date-time)Requiredstatus"NOT_STARTED" | "PENDING" | "INVALID" | "FAILED" | "VERIFYING" | "VERIFIED"Requiredreasonstringorganization_idstringRequiredcatch_allbooleanRequiredcatch_all_ttl_secondsintegernameserversstring[]dns_provider"cloudflare" | "route53" | "google" | "vercel" | "namecheap" | "godaddy" | "digitalocean" | "hetzner" | "porkbun" | "other"dns_provider_urlstringdomain_connectobjectverified_atstring (date-time)last_checked_atstring (date-time)Each item of records is a VerificationRecord:
type"TXT" | "CNAME" | "MX"RequirednamestringRequiredvaluestringRequiredstatus"MISSING" | "INVALID" | "VALID"Requiredpriorityintegerreasonstringpurpose"inbound" | "spf" | "dkim" | "dmarc" | "provider"RequiredrequiredbooleanRequiredErrors
| Status | Meaning |
|---|---|
400 | Invalid request: error.type is validation and error.param names the field. |
401 | Missing, invalid, expired or revoked credential. |
403 | The credential lacks the permission or scope for this request (error.type forbidden), or MachineMail suspended the organization or its sending (account_suspended: error.message says what still works; do not retry or re-register). |
409 | Conflicts with an existing resource. |
500 | Unexpected server error. |
Error bodies use the error envelope.
Example
Get Domain
Authentication: Authorization: Bearer <api key> or the dashboard mm_session cookie. Permission: domain_read.
Path parameters
domain_idstringRequiredResponse
200 The domain (application/json)
pod_idstringRequireddomain_idstringRequireddomainstringRequiredfeedback_enabledbooleanRequiredinbound_enabledbooleanRequiredsubdomains_enabledbooleanRequiredtracking_enabledbooleanRequiredclient_idstringupdated_atstring (date-time)Requiredcreated_atstring (date-time)Requiredstatus"NOT_STARTED" | "PENDING" | "INVALID" | "FAILED" | "VERIFYING" | "VERIFIED"Requiredreasonstringorganization_idstringRequiredcatch_allbooleanRequiredcatch_all_ttl_secondsintegernameserversstring[]dns_provider"cloudflare" | "route53" | "google" | "vercel" | "namecheap" | "godaddy" | "digitalocean" | "hetzner" | "porkbun" | "other"dns_provider_urlstringdomain_connectobjectverified_atstring (date-time)last_checked_atstring (date-time)Each item of records is a VerificationRecord:
type"TXT" | "CNAME" | "MX"RequirednamestringRequiredvaluestringRequiredstatus"MISSING" | "INVALID" | "VALID"Requiredpriorityintegerreasonstringpurpose"inbound" | "spf" | "dkim" | "dmarc" | "provider"RequiredrequiredbooleanRequiredErrors
| Status | Meaning |
|---|---|
401 | Missing, invalid, expired or revoked credential. |
403 | The credential lacks the permission or scope for this request (error.type forbidden), or MachineMail suspended the organization or its sending (account_suspended: error.message says what still works; do not retry or re-register). |
404 | Not found. Also returned for resources outside the credential scope. |
500 | Unexpected server error. |
Error bodies use the error envelope.
Example
Update Domain
Fields you omit are unchanged. subdomains_enabled and tracking_enabled are not supported.
Authentication: Authorization: Bearer <api key> or the dashboard mm_session cookie. Permission: domain_update.
Path parameters
domain_idstringRequiredRequest body
Content type: application/json.
feedback_enabledbooleaninbound_enabledbooleancatch_allbooleancatch_all_ttl_secondsinteger | nullResponse
200 The updated domain (application/json)
pod_idstringRequireddomain_idstringRequireddomainstringRequiredfeedback_enabledbooleanRequiredinbound_enabledbooleanRequiredsubdomains_enabledbooleanRequiredtracking_enabledbooleanRequiredclient_idstringupdated_atstring (date-time)Requiredcreated_atstring (date-time)Requiredstatus"NOT_STARTED" | "PENDING" | "INVALID" | "FAILED" | "VERIFYING" | "VERIFIED"Requiredreasonstringorganization_idstringRequiredcatch_allbooleanRequiredcatch_all_ttl_secondsintegernameserversstring[]dns_provider"cloudflare" | "route53" | "google" | "vercel" | "namecheap" | "godaddy" | "digitalocean" | "hetzner" | "porkbun" | "other"dns_provider_urlstringdomain_connectobjectverified_atstring (date-time)last_checked_atstring (date-time)Each item of records is a VerificationRecord:
type"TXT" | "CNAME" | "MX"RequirednamestringRequiredvaluestringRequiredstatus"MISSING" | "INVALID" | "VALID"Requiredpriorityintegerreasonstringpurpose"inbound" | "spf" | "dkim" | "dmarc" | "provider"RequiredrequiredbooleanRequiredErrors
| Status | Meaning |
|---|---|
400 | Invalid request: error.type is validation and error.param names the field. |
401 | Missing, invalid, expired or revoked credential. |
403 | The credential lacks the permission or scope for this request (error.type forbidden), or MachineMail suspended the organization or its sending (account_suspended: error.message says what still works; do not retry or re-register). |
404 | Not found. Also returned for resources outside the credential scope. |
500 | Unexpected server error. |
Error bodies use the error envelope.
Example
Delete Domain
Inboxes on the domain are not deleted.
Authentication: Authorization: Bearer <api key> or the dashboard mm_session cookie. Permission: domain_delete.
Path parameters
domain_idstringRequiredResponse
200 Deleted (application/json)
oktrueRequiredErrors
| Status | Meaning |
|---|---|
401 | Missing, invalid, expired or revoked credential. |
403 | The credential lacks the permission or scope for this request (error.type forbidden), or MachineMail suspended the organization or its sending (account_suspended: error.message says what still works; do not retry or re-register). |
404 | Not found. Also returned for resources outside the credential scope. |
500 | Unexpected server error. |
Error bodies use the error envelope.
Example
Get Domain Connect Setup
Discovers whether the domain’s DNS provider supports Domain Connect (TXT _domainconnect.<zone> and the provider’s /v2/<zone>/settings) and has onboarded the MachineMail template (machinemail.dev/email). When it has, apply_url is a signed synchronous-flow link (RS256, key=_dck1, sig last) that opens the provider with the outstanding MX, SPF, DKIM and DMARC records prefilled. Discovery is cached on the domain (6 h; provider errors 10 min) and re-run by Verify Domain.
Authentication: Authorization: Bearer <api key> or the dashboard mm_session cookie. Permission: domain_read.
Path parameters
domain_idstringRequiredResponse
200 Domain Connect support for the domain (application/json)
supportedbooleanRequiredprovider_namestringapply_urlstringprovider_idstringurl_sync_uxstringwidthintegerheightintegerreason"no_domain_connect" | "provider_error" | "no_sync_flow" | "template_not_supported" | "records_not_templatable" | "already_configured" | "not_configured"checked_atstring (date-time)RequiredErrors
| Status | Meaning |
|---|---|
401 | Missing, invalid, expired or revoked credential. |
403 | The credential lacks the permission or scope for this request (error.type forbidden), or MachineMail suspended the organization or its sending (account_suspended: error.message says what still works; do not retry or re-register). |
404 | Not found. Also returned for resources outside the credential scope. |
500 | Unexpected server error. |
Error bodies use the error envelope.
Example
Verify Domain
Checks every DNS record now, updates records[].status and status, and re-runs Domain Connect discovery. A domain.verified event is emitted when the domain becomes VERIFIED.
Authentication: Authorization: Bearer <api key> or the dashboard mm_session cookie. Permission: domain_update.
Path parameters
domain_idstringRequiredResponse
200 The domain after the check (application/json)
pod_idstringRequireddomain_idstringRequireddomainstringRequiredfeedback_enabledbooleanRequiredinbound_enabledbooleanRequiredsubdomains_enabledbooleanRequiredtracking_enabledbooleanRequiredclient_idstringupdated_atstring (date-time)Requiredcreated_atstring (date-time)Requiredstatus"NOT_STARTED" | "PENDING" | "INVALID" | "FAILED" | "VERIFYING" | "VERIFIED"Requiredreasonstringorganization_idstringRequiredcatch_allbooleanRequiredcatch_all_ttl_secondsintegernameserversstring[]dns_provider"cloudflare" | "route53" | "google" | "vercel" | "namecheap" | "godaddy" | "digitalocean" | "hetzner" | "porkbun" | "other"dns_provider_urlstringdomain_connectobjectverified_atstring (date-time)last_checked_atstring (date-time)Each item of records is a VerificationRecord:
type"TXT" | "CNAME" | "MX"RequirednamestringRequiredvaluestringRequiredstatus"MISSING" | "INVALID" | "VALID"Requiredpriorityintegerreasonstringpurpose"inbound" | "spf" | "dkim" | "dmarc" | "provider"RequiredrequiredbooleanRequiredErrors
| Status | Meaning |
|---|---|
401 | Missing, invalid, expired or revoked credential. |
403 | The credential lacks the permission or scope for this request (error.type forbidden), or MachineMail suspended the organization or its sending (account_suspended: error.message says what still works; do not retry or re-register). |
404 | Not found. Also returned for resources outside the credential scope. |
500 | Unexpected server error. |
Error bodies use the error envelope.
Example
Get Zone File
Authentication: Authorization: Bearer <api key> or the dashboard mm_session cookie. Permission: domain_read.
Path parameters
domain_idstringRequiredResponse
200 A BIND zone file with the records to publish (text/plain)
Headers:
Content-DispositionstringErrors
| Status | Meaning |
|---|---|
401 | Missing, invalid, expired or revoked credential. |
403 | The credential lacks the permission or scope for this request (error.type forbidden), or MachineMail suspended the organization or its sending (account_suspended: error.message says what still works; do not retry or re-register). |
404 | Not found. Also returned for resources outside the credential scope. |
500 | Unexpected server error. |
Error bodies use the error envelope.
Example
List Domains in Pod
Same as List Domains (GET /v0/domains), limited to the pod.
Authentication: Authorization: Bearer <api key> or the dashboard mm_session cookie. Permission: domain_read.
Path parameters
pod_idstringRequiredQuery parameters
limitintegerpage_tokenstringascendingbooleanResponse
200 A page of domains (application/json)
countintegerRequiredlimitintegernext_page_tokenstringEach item of domains is a DomainItem:
pod_idstringRequireddomain_idstringRequireddomainstringRequiredfeedback_enabledbooleanRequiredinbound_enabledbooleanRequiredsubdomains_enabledbooleanRequiredtracking_enabledbooleanRequiredclient_idstringupdated_atstring (date-time)Requiredcreated_atstring (date-time)Requiredstatus"NOT_STARTED" | "PENDING" | "INVALID" | "FAILED" | "VERIFYING" | "VERIFIED"Requiredreasonstringorganization_idstringRequiredcatch_allbooleanRequiredcatch_all_ttl_secondsintegernameserversstring[]dns_provider"cloudflare" | "route53" | "google" | "vercel" | "namecheap" | "godaddy" | "digitalocean" | "hetzner" | "porkbun" | "other"dns_provider_urlstringdomain_connectobjectverified_atstring (date-time)last_checked_atstring (date-time)Errors
| Status | Meaning |
|---|---|
400 | Invalid request: error.type is validation and error.param names the field. |
401 | Missing, invalid, expired or revoked credential. |
403 | The credential lacks the permission or scope for this request (error.type forbidden), or MachineMail suspended the organization or its sending (account_suspended: error.message says what still works; do not retry or re-register). |
404 | Not found. Also returned for resources outside the credential scope. |
500 | Unexpected server error. |
Error bodies use the error envelope.
Example
Create Domain in Pod
Same as Create Domain (POST /v0/domains), limited to the pod.
Authentication: Authorization: Bearer <api key> or the dashboard mm_session cookie. Permission: domain_create.
Path parameters
pod_idstringRequiredRequest body
Content type: application/json.
domainstringRequiredfeedback_enabledbooleaninbound_enabledbooleanclient_idstringpod_idstringcatch_allbooleancatch_all_ttl_secondsinteger | nullResponse
200 A domain with this client_id already exists; it is returned unchanged. (application/json)
pod_idstringRequireddomain_idstringRequireddomainstringRequiredfeedback_enabledbooleanRequiredinbound_enabledbooleanRequiredsubdomains_enabledbooleanRequiredtracking_enabledbooleanRequiredclient_idstringupdated_atstring (date-time)Requiredcreated_atstring (date-time)Requiredstatus"NOT_STARTED" | "PENDING" | "INVALID" | "FAILED" | "VERIFYING" | "VERIFIED"Requiredreasonstringorganization_idstringRequiredcatch_allbooleanRequiredcatch_all_ttl_secondsintegernameserversstring[]dns_provider"cloudflare" | "route53" | "google" | "vercel" | "namecheap" | "godaddy" | "digitalocean" | "hetzner" | "porkbun" | "other"dns_provider_urlstringdomain_connectobjectverified_atstring (date-time)last_checked_atstring (date-time)Each item of records is a VerificationRecord:
type"TXT" | "CNAME" | "MX"RequirednamestringRequiredvaluestringRequiredstatus"MISSING" | "INVALID" | "VALID"Requiredpriorityintegerreasonstringpurpose"inbound" | "spf" | "dkim" | "dmarc" | "provider"RequiredrequiredbooleanRequired201 Created (application/json)
pod_idstringRequireddomain_idstringRequireddomainstringRequiredfeedback_enabledbooleanRequiredinbound_enabledbooleanRequiredsubdomains_enabledbooleanRequiredtracking_enabledbooleanRequiredclient_idstringupdated_atstring (date-time)Requiredcreated_atstring (date-time)Requiredstatus"NOT_STARTED" | "PENDING" | "INVALID" | "FAILED" | "VERIFYING" | "VERIFIED"Requiredreasonstringorganization_idstringRequiredcatch_allbooleanRequiredcatch_all_ttl_secondsintegernameserversstring[]dns_provider"cloudflare" | "route53" | "google" | "vercel" | "namecheap" | "godaddy" | "digitalocean" | "hetzner" | "porkbun" | "other"dns_provider_urlstringdomain_connectobjectverified_atstring (date-time)last_checked_atstring (date-time)Each item of records is a VerificationRecord:
type"TXT" | "CNAME" | "MX"RequirednamestringRequiredvaluestringRequiredstatus"MISSING" | "INVALID" | "VALID"Requiredpriorityintegerreasonstringpurpose"inbound" | "spf" | "dkim" | "dmarc" | "provider"RequiredrequiredbooleanRequiredErrors
| Status | Meaning |
|---|---|
400 | Invalid request: error.type is validation and error.param names the field. |
401 | Missing, invalid, expired or revoked credential. |
403 | The credential lacks the permission or scope for this request (error.type forbidden), or MachineMail suspended the organization or its sending (account_suspended: error.message says what still works; do not retry or re-register). |
404 | Not found. Also returned for resources outside the credential scope. |
409 | Conflicts with an existing resource. |
500 | Unexpected server error. |
Error bodies use the error envelope.
Example
Get Domain in Pod
Same as Get Domain (GET /v0/domains/{domain_id}), limited to the pod.
Authentication: Authorization: Bearer <api key> or the dashboard mm_session cookie. Permission: domain_read.
Path parameters
pod_idstringRequireddomain_idstringRequiredResponse
200 The domain (application/json)
pod_idstringRequireddomain_idstringRequireddomainstringRequiredfeedback_enabledbooleanRequiredinbound_enabledbooleanRequiredsubdomains_enabledbooleanRequiredtracking_enabledbooleanRequiredclient_idstringupdated_atstring (date-time)Requiredcreated_atstring (date-time)Requiredstatus"NOT_STARTED" | "PENDING" | "INVALID" | "FAILED" | "VERIFYING" | "VERIFIED"Requiredreasonstringorganization_idstringRequiredcatch_allbooleanRequiredcatch_all_ttl_secondsintegernameserversstring[]dns_provider"cloudflare" | "route53" | "google" | "vercel" | "namecheap" | "godaddy" | "digitalocean" | "hetzner" | "porkbun" | "other"dns_provider_urlstringdomain_connectobjectverified_atstring (date-time)last_checked_atstring (date-time)Each item of records is a VerificationRecord:
type"TXT" | "CNAME" | "MX"RequirednamestringRequiredvaluestringRequiredstatus"MISSING" | "INVALID" | "VALID"Requiredpriorityintegerreasonstringpurpose"inbound" | "spf" | "dkim" | "dmarc" | "provider"RequiredrequiredbooleanRequiredErrors
| Status | Meaning |
|---|---|
401 | Missing, invalid, expired or revoked credential. |
403 | The credential lacks the permission or scope for this request (error.type forbidden), or MachineMail suspended the organization or its sending (account_suspended: error.message says what still works; do not retry or re-register). |
404 | Not found. Also returned for resources outside the credential scope. |
500 | Unexpected server error. |
Error bodies use the error envelope.
Example
Update Domain in Pod
Same as Update Domain (PATCH /v0/domains/{domain_id}), limited to the pod.
Authentication: Authorization: Bearer <api key> or the dashboard mm_session cookie. Permission: domain_update.
Path parameters
pod_idstringRequireddomain_idstringRequiredRequest body
Content type: application/json.
feedback_enabledbooleaninbound_enabledbooleancatch_allbooleancatch_all_ttl_secondsinteger | nullResponse
200 The updated domain (application/json)
pod_idstringRequireddomain_idstringRequireddomainstringRequiredfeedback_enabledbooleanRequiredinbound_enabledbooleanRequiredsubdomains_enabledbooleanRequiredtracking_enabledbooleanRequiredclient_idstringupdated_atstring (date-time)Requiredcreated_atstring (date-time)Requiredstatus"NOT_STARTED" | "PENDING" | "INVALID" | "FAILED" | "VERIFYING" | "VERIFIED"Requiredreasonstringorganization_idstringRequiredcatch_allbooleanRequiredcatch_all_ttl_secondsintegernameserversstring[]dns_provider"cloudflare" | "route53" | "google" | "vercel" | "namecheap" | "godaddy" | "digitalocean" | "hetzner" | "porkbun" | "other"dns_provider_urlstringdomain_connectobjectverified_atstring (date-time)last_checked_atstring (date-time)Each item of records is a VerificationRecord:
type"TXT" | "CNAME" | "MX"RequirednamestringRequiredvaluestringRequiredstatus"MISSING" | "INVALID" | "VALID"Requiredpriorityintegerreasonstringpurpose"inbound" | "spf" | "dkim" | "dmarc" | "provider"RequiredrequiredbooleanRequiredErrors
| Status | Meaning |
|---|---|
400 | Invalid request: error.type is validation and error.param names the field. |
401 | Missing, invalid, expired or revoked credential. |
403 | The credential lacks the permission or scope for this request (error.type forbidden), or MachineMail suspended the organization or its sending (account_suspended: error.message says what still works; do not retry or re-register). |
404 | Not found. Also returned for resources outside the credential scope. |
500 | Unexpected server error. |
Error bodies use the error envelope.
Example
Delete Domain in Pod
Same as Delete Domain (DELETE /v0/domains/{domain_id}), limited to the pod.
Authentication: Authorization: Bearer <api key> or the dashboard mm_session cookie. Permission: domain_delete.
Path parameters
pod_idstringRequireddomain_idstringRequiredResponse
200 Deleted (application/json)
oktrueRequiredErrors
| Status | Meaning |
|---|---|
401 | Missing, invalid, expired or revoked credential. |
403 | The credential lacks the permission or scope for this request (error.type forbidden), or MachineMail suspended the organization or its sending (account_suspended: error.message says what still works; do not retry or re-register). |
404 | Not found. Also returned for resources outside the credential scope. |
500 | Unexpected server error. |
Error bodies use the error envelope.
Example
Get Domain Connect Setup in Pod
Same as Get Domain Connect Setup (GET /v0/domains/{domain_id}/domain-connect), limited to the pod.
Authentication: Authorization: Bearer <api key> or the dashboard mm_session cookie. Permission: domain_read.
Path parameters
pod_idstringRequireddomain_idstringRequiredResponse
200 Domain Connect support for the domain (application/json)
supportedbooleanRequiredprovider_namestringapply_urlstringprovider_idstringurl_sync_uxstringwidthintegerheightintegerreason"no_domain_connect" | "provider_error" | "no_sync_flow" | "template_not_supported" | "records_not_templatable" | "already_configured" | "not_configured"checked_atstring (date-time)RequiredErrors
| Status | Meaning |
|---|---|
401 | Missing, invalid, expired or revoked credential. |
403 | The credential lacks the permission or scope for this request (error.type forbidden), or MachineMail suspended the organization or its sending (account_suspended: error.message says what still works; do not retry or re-register). |
404 | Not found. Also returned for resources outside the credential scope. |
500 | Unexpected server error. |
Error bodies use the error envelope.
Example
Verify Domain in Pod
Same as Verify Domain (POST /v0/domains/{domain_id}/verify), limited to the pod.
Authentication: Authorization: Bearer <api key> or the dashboard mm_session cookie. Permission: domain_update.
Path parameters
pod_idstringRequireddomain_idstringRequiredResponse
200 The domain after the check (application/json)
pod_idstringRequireddomain_idstringRequireddomainstringRequiredfeedback_enabledbooleanRequiredinbound_enabledbooleanRequiredsubdomains_enabledbooleanRequiredtracking_enabledbooleanRequiredclient_idstringupdated_atstring (date-time)Requiredcreated_atstring (date-time)Requiredstatus"NOT_STARTED" | "PENDING" | "INVALID" | "FAILED" | "VERIFYING" | "VERIFIED"Requiredreasonstringorganization_idstringRequiredcatch_allbooleanRequiredcatch_all_ttl_secondsintegernameserversstring[]dns_provider"cloudflare" | "route53" | "google" | "vercel" | "namecheap" | "godaddy" | "digitalocean" | "hetzner" | "porkbun" | "other"dns_provider_urlstringdomain_connectobjectverified_atstring (date-time)last_checked_atstring (date-time)Each item of records is a VerificationRecord:
type"TXT" | "CNAME" | "MX"RequirednamestringRequiredvaluestringRequiredstatus"MISSING" | "INVALID" | "VALID"Requiredpriorityintegerreasonstringpurpose"inbound" | "spf" | "dkim" | "dmarc" | "provider"RequiredrequiredbooleanRequiredErrors
| Status | Meaning |
|---|---|
401 | Missing, invalid, expired or revoked credential. |
403 | The credential lacks the permission or scope for this request (error.type forbidden), or MachineMail suspended the organization or its sending (account_suspended: error.message says what still works; do not retry or re-register). |
404 | Not found. Also returned for resources outside the credential scope. |
500 | Unexpected server error. |
Error bodies use the error envelope.
Example
Get Zone File in Pod
Same as Get Zone File (GET /v0/domains/{domain_id}/zone-file), limited to the pod.
Authentication: Authorization: Bearer <api key> or the dashboard mm_session cookie. Permission: domain_read.
Path parameters
pod_idstringRequireddomain_idstringRequiredResponse
200 A BIND zone file with the records to publish (text/plain)
Headers:
Content-DispositionstringErrors
| Status | Meaning |
|---|---|
401 | Missing, invalid, expired or revoked credential. |
403 | The credential lacks the permission or scope for this request (error.type forbidden), or MachineMail suspended the organization or its sending (account_suspended: error.message says what still works; do not retry or re-register). |
404 | Not found. Also returned for resources outside the credential scope. |
500 | Unexpected server error. |
Error bodies use the error envelope.