Allow and block lists
Lists have a direction (send, receive or reply) and a type (allow or block). Entries are addresses or domains, stored lowercase.
curl -X POST "$BASE_URL/v0/inboxes/$INBOX_ID/lists/receive/block" \
-H "Authorization: Bearer $API_KEY" -H "Content-Type: application/json" \
-d '{"entry": "spammer.example", "reason": "unsolicited"}'
Scopes are organization (/v0/lists/...), pod (/v0/pods/:pod_id/lists/...) and inbox (/v0/inboxes/:inbox_id/lists/...). The narrowest scope with a matching entry decides, and a scope with a non-empty allow list blocks everything that does not match it. Org-level lists are not reachable with pod or inbox scoped keys.
- Adding an existing entry returns
403 already_exists.reasonis only valid on block lists. - A blocked recipient on send returns
403 recipient_blocked. Blocked inbound mail is stored with theblockedlabel and emitsmessage.received.blocked.
Suppressions#
Addresses that hard bounce or complain are suppressed automatically. Sending to one returns 422 recipient_suppressed. GET /v0/suppressions lists them (needs list_entry_read) and DELETE /v0/suppressions/:address clears one (needs list_entry_delete). The dashboard has an Allow & block screen (organization, pod or inbox scope) and a Suppressions screen. The TypeScript SDK has no methods for either; the Python SDK has.