Skip to main content
Configure receiving under a verified domain identity. The receiving configuration contains only enabled and attachments_bucket. The identity’s dns_records contains sending and receiving DNS guidance, including the complete MX value. All identities use the same ownership and IAM checks.

Enable receiving and add a rule

Open Email → Identities and select the domain.
  1. In Settings, choose an Attachments bucket in the Receiving card, turn on the switch, and select Save. The bucket must belong to the same account and region.
  2. Open Recipient rules and select Create rule. Choose an exact address, address prefix, or all addresses, then pick a Notifications topic in the same account and region from the resource selector.
  3. Open DNS records and publish the MX record from Receiving records. Sending records contains the records used for verification and sending, including any custom MAIL FROM records.
The recipient rules table shows each destination topic by name. Select a rule to access its deletion controls, or use its enable/disable action. Message retention and the selected attachment bucket appear in the identity’s details above the tabs. Organization quotas control message size and traffic.
Creating a rule requires email:CreateRecipientRule on the identity and notifications:Publish on the destination topic. Topic resource-policy denies also apply. Selecting a bucket delegates storage:PutObject and storage:GetObject under email/{identity_id}/ in that bucket. Current IAM permissions, permission boundaries, bucket policies, and the original session scope-down remain enforced. See permissions.

Recipient matching

match_type makes the matching behavior explicit: Exact rules take priority, followed by the longest matching prefix and then the catch-all. Only enabled rules accept recipients. An unmatched recipient is rejected during SMTP delivery. You can configure up to 100 rules per identity. Rules have their own UUID and CRN. POST creates a rule and returns 409 when its matching pattern already exists. Read or delete an individual rule at /v1/identities/{identity_id}/recipient-rules/{rule_id}. Use PATCH on that path to change only the supplied fields. List responses include normal meta pagination. The topic response is a ResourceRef containing its UUID, CRN, and name. Configuration PATCH also preserves omissions. Passing attachments_bucket: null clears the binding only when receiving is disabled. To disable and detach together, include both enabled: false and attachments_bucket: null in the same request.

Read accepted mail

GET /v1/received-messages lists metadata across the account, with optional identity, recipient, and review_reason filters. Read one record by UUID, then request its /content, /raw, or /attachments/{attachment_id} separately. /content returns full decoded text and HTML; /raw downloads reconstructed MIME. Attachment IDs are stable opaque UUIDs. Metadata and content require separate grants. Treat HTML as untrusted data and sanitize it before rendering. identity is a ResourceRef. rfc_message_id in content is the RFC Message-ID header, not the Email resource UUID. notification_status is pending, retrying, or published; notification_error provides safe failure detail. Publication retries automatically until expiry. These fields describe the notification event, not SMTP acceptance, which happened before the message was returned. review_reason can be clear, malware, spam, or sender_unverified. Malware content is quarantined and cannot be downloaded through the content API. Check content_available and expires_at before attempting retrieval. published_at reports when the Notifications event was published, not when every subscriber finished processing it. The parsed content’s message_id, in_reply_to, and references are RFC email headers. They are not Basaltic resource UUIDs or ResourceRefs.

Attachment storage

Each accepted attachment is stored as a separate object in the selected bucket. Its metadata contains a bucket ResourceRef, key, optional version_id, and sha256. Storage pricing, quotas, encryption, and lifecycle rules apply normally. There is no additional Email storage allowance or accumulated attachment-storage cap. A missing, changed, or deleted object is unavailable for download. Email acknowledges an incoming SMTP delivery only after its attachments and the message record are durable. Storage failures return a temporary SMTP failure so the sender can retry. Retries do not charge a second received-message delivery. Malware attachments are never written into the customer bucket. Changing the bucket affects new messages; it does not move existing objects. Disabling receiving preserves the bucket selection and previously accepted mail. Clearing attachments_bucket with null requires receiving to be disabled.

Quotas and retention

Sent and received message content is retained for 30 days, included in its sending or receiving price. expires_at identifies the deadline. Expired messages are unavailable through the message APIs even if notification publication failed. Background cleanup removes retained content; operational billing and deduplication records can remain. Attachment objects are not deleted when an email expires: the bucket owner controls their lifecycle and pays for their storage. Organization quotas apply across accounts and identities in each region: There is no daily receiving allowance. One message accepted for three recipients counts as three receiving deliveries. Duplicate retries are acknowledged without counting again. SMTP rejects a message above the organization size quota; temporary capacity or dependency failures ask the sender to retry. Recipient matching supports 100 rules per domain. MIME parsing has technical complexity bounds; these are separate from stored-byte capacity. The content API returns full text and HTML within the organization message-size quota. Retrieve attachments from their bucket or the message attachment download endpoint during retention.