Lists
Allow and block lists for the organization, a pod or an inbox. A non-empty allow list is allow-only: one receive/allow entry blocks mail from every sender not on it.
| Method | Path | Summary |
|---|---|---|
GET | /v0/inboxes/{inbox_id}/lists/{direction}/{type} | List Entries in Inbox |
POST | /v0/inboxes/{inbox_id}/lists/{direction}/{type} | Create List Entry in Inbox |
GET | /v0/inboxes/{inbox_id}/lists/{direction}/{type}/{entry} | Get List Entry in Inbox |
DELETE | /v0/inboxes/{inbox_id}/lists/{direction}/{type}/{entry} | Delete List Entry in Inbox |
GET | /v0/lists/{direction}/{type} | List Entries |
POST | /v0/lists/{direction}/{type} | Create List Entry |
GET | /v0/lists/{direction}/{type}/{entry} | Get List Entry |
DELETE | /v0/lists/{direction}/{type}/{entry} | Delete List Entry |
GET | /v0/pods/{pod_id}/lists/{direction}/{type} | List Entries in Pod |
POST | /v0/pods/{pod_id}/lists/{direction}/{type} | Create List Entry in Pod |
GET | /v0/pods/{pod_id}/lists/{direction}/{type}/{entry} | Get List Entry in Pod |
DELETE | /v0/pods/{pod_id}/lists/{direction}/{type}/{entry} | Delete List Entry in Pod |
List Entries in Inbox
Same as List Entries (GET /v0/lists/{direction}/{type}), limited to the inbox. While any allow entry applies for a direction, every address that matches none is blocked (allow-only).
Authentication: Authorization: Bearer <api key> or the dashboard mm_session cookie. Permission: list_entry_read.
Path parameters
inbox_idstringRequireddirection"send" | "receive" | "reply"Requiredtype"allow" | "block"RequiredQuery parameters
limitintegerpage_tokenstringascendingbooleanResponse
200 A page of entries (application/json)
countintegerRequiredlimitintegernext_page_tokenstringEach item of entries is a ListEntry:
entrystringRequiredorganization_idstringRequiredpod_idstringinbox_idstringreasonstringdirection"send" | "receive" | "reply"Requiredlist_type"allow" | "block"Requiredentry_type"email" | "domain"Requiredread_onlybooleanRequiredcreated_atstring (date-time)RequiredErrors
| 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 List Entry in Inbox
Same as Create List Entry (POST /v0/lists/{direction}/{type}), limited to the inbox. A receive/allow entry here makes this scope allow-only: mail from every sender that matches no allow entry is labeled BLOCKED and withheld from agents. An allow-listed sender reaches verified only with an aligned DMARC pass.
Authentication: Authorization: Bearer <api key> or the dashboard mm_session cookie. Permission: list_entry_create.
Path parameters
inbox_idstringRequireddirection"send" | "receive" | "reply"Requiredtype"allow" | "block"RequiredRequest body
Content type: application/json.
entrystringRequiredreasonstringResponse
200 The entry (application/json)
entrystringRequiredorganization_idstringRequiredpod_idstringinbox_idstringreasonstringdirection"send" | "receive" | "reply"Requiredlist_type"allow" | "block"Requiredentry_type"email" | "domain"Requiredread_onlybooleanRequiredcreated_atstring (date-time)RequiredErrors
| 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
Get List Entry in Inbox
Same as Get List Entry (GET /v0/lists/{direction}/{type}/{entry}), limited to the inbox.
Authentication: Authorization: Bearer <api key> or the dashboard mm_session cookie. Permission: list_entry_read.
Path parameters
inbox_idstringRequireddirection"send" | "receive" | "reply"Requiredtype"allow" | "block"RequiredentrystringRequiredResponse
200 The entry (application/json)
entrystringRequiredorganization_idstringRequiredpod_idstringinbox_idstringreasonstringdirection"send" | "receive" | "reply"Requiredlist_type"allow" | "block"Requiredentry_type"email" | "domain"Requiredread_onlybooleanRequiredcreated_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
Delete List Entry in Inbox
Same as Delete List Entry (DELETE /v0/lists/{direction}/{type}/{entry}), limited to the inbox.
Authentication: Authorization: Bearer <api key> or the dashboard mm_session cookie. Permission: list_entry_delete.
Path parameters
inbox_idstringRequireddirection"send" | "receive" | "reply"Requiredtype"allow" | "block"RequiredentrystringRequiredResponse
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
List Entries
Entries stored at this exact level. Mail is checked against the organization, pod and inbox lists together. An allow entry wins over a block entry; while any allow entry exists for a direction, every address that matches none is blocked (allow-only).
Authentication: Authorization: Bearer <api key> or the dashboard mm_session cookie. Permission: list_entry_read.
Path parameters
direction"send" | "receive" | "reply"Requiredtype"allow" | "block"RequiredQuery parameters
limitintegerpage_tokenstringascendingbooleanResponse
200 A page of entries (application/json)
countintegerRequiredlimitintegernext_page_tokenstringEach item of entries is a ListEntry:
entrystringRequiredorganization_idstringRequiredpod_idstringinbox_idstringreasonstringdirection"send" | "receive" | "reply"Requiredlist_type"allow" | "block"Requiredentry_type"email" | "domain"Requiredread_onlybooleanRequiredcreated_atstring (date-time)RequiredErrors
| 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 List Entry
An address (user@example.com) or a domain (example.com); a domain also matches its subdomains. Adding an entry that exists returns it unchanged.
An allow entry makes its scope allow-only. The first receive/allow entry at the organization (/v0/lists), a pod (/v0/pods/{pod_id}/lists) or an inbox (/v0/inboxes/{inbox_id}/lists) blocks every sender that does not match an allow entry: their mail is labeled BLOCKED, emits message.received.blocked and is withheld from agents. Likewise, a send/allow entry blocks sending to every other recipient. An allow-listed sender reaches trust level verified only when DMARC passes and is aligned; do not add one only to raise trust. Prior correspondence (the inbox has written to the sender) is the usual way to reach verified.
Authentication: Authorization: Bearer <api key> or the dashboard mm_session cookie. Permission: list_entry_create.
Path parameters
direction"send" | "receive" | "reply"Requiredtype"allow" | "block"RequiredRequest body
Content type: application/json.
entrystringRequiredreasonstringResponse
200 The entry (application/json)
entrystringRequiredorganization_idstringRequiredpod_idstringinbox_idstringreasonstringdirection"send" | "receive" | "reply"Requiredlist_type"allow" | "block"Requiredentry_type"email" | "domain"Requiredread_onlybooleanRequiredcreated_atstring (date-time)RequiredErrors
| 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
Get List Entry
Authentication: Authorization: Bearer <api key> or the dashboard mm_session cookie. Permission: list_entry_read.
Path parameters
direction"send" | "receive" | "reply"Requiredtype"allow" | "block"RequiredentrystringRequiredResponse
200 The entry (application/json)
entrystringRequiredorganization_idstringRequiredpod_idstringinbox_idstringreasonstringdirection"send" | "receive" | "reply"Requiredlist_type"allow" | "block"Requiredentry_type"email" | "domain"Requiredread_onlybooleanRequiredcreated_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
Delete List Entry
Deleting the last allow entry for a direction at every level that applies ends allow-only mode: unmatched addresses are allowed again unless a block entry matches.
Authentication: Authorization: Bearer <api key> or the dashboard mm_session cookie. Permission: list_entry_delete.
Path parameters
direction"send" | "receive" | "reply"Requiredtype"allow" | "block"RequiredentrystringRequiredResponse
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
List Entries in Pod
Same as List Entries (GET /v0/lists/{direction}/{type}), limited to the pod. While any allow entry applies for a direction, every address that matches none is blocked (allow-only).
Authentication: Authorization: Bearer <api key> or the dashboard mm_session cookie. Permission: list_entry_read.
Path parameters
pod_idstringRequireddirection"send" | "receive" | "reply"Requiredtype"allow" | "block"RequiredQuery parameters
limitintegerpage_tokenstringascendingbooleanResponse
200 A page of entries (application/json)
countintegerRequiredlimitintegernext_page_tokenstringEach item of entries is a ListEntry:
entrystringRequiredorganization_idstringRequiredpod_idstringinbox_idstringreasonstringdirection"send" | "receive" | "reply"Requiredlist_type"allow" | "block"Requiredentry_type"email" | "domain"Requiredread_onlybooleanRequiredcreated_atstring (date-time)RequiredErrors
| 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 List Entry in Pod
Same as Create List Entry (POST /v0/lists/{direction}/{type}), limited to the pod. A receive/allow entry here makes this scope allow-only: mail from every sender that matches no allow entry is labeled BLOCKED and withheld from agents. An allow-listed sender reaches verified only with an aligned DMARC pass.
Authentication: Authorization: Bearer <api key> or the dashboard mm_session cookie. Permission: list_entry_create.
Path parameters
pod_idstringRequireddirection"send" | "receive" | "reply"Requiredtype"allow" | "block"RequiredRequest body
Content type: application/json.
entrystringRequiredreasonstringResponse
200 The entry (application/json)
entrystringRequiredorganization_idstringRequiredpod_idstringinbox_idstringreasonstringdirection"send" | "receive" | "reply"Requiredlist_type"allow" | "block"Requiredentry_type"email" | "domain"Requiredread_onlybooleanRequiredcreated_atstring (date-time)RequiredErrors
| 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
Get List Entry in Pod
Same as Get List Entry (GET /v0/lists/{direction}/{type}/{entry}), limited to the pod.
Authentication: Authorization: Bearer <api key> or the dashboard mm_session cookie. Permission: list_entry_read.
Path parameters
pod_idstringRequireddirection"send" | "receive" | "reply"Requiredtype"allow" | "block"RequiredentrystringRequiredResponse
200 The entry (application/json)
entrystringRequiredorganization_idstringRequiredpod_idstringinbox_idstringreasonstringdirection"send" | "receive" | "reply"Requiredlist_type"allow" | "block"Requiredentry_type"email" | "domain"Requiredread_onlybooleanRequiredcreated_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
Delete List Entry in Pod
Same as Delete List Entry (DELETE /v0/lists/{direction}/{type}/{entry}), limited to the pod.
Authentication: Authorization: Bearer <api key> or the dashboard mm_session cookie. Permission: list_entry_delete.
Path parameters
pod_idstringRequireddirection"send" | "receive" | "reply"Requiredtype"allow" | "block"RequiredentrystringRequiredResponse
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.