Menu

API reference · Email Marketing

Suppressions

email_marketing · suppressions · 3 operations

GET/v1/email-marketing/suppressions

List the suppression list

email_marketing.suppressions.list

ReadIdempotentSince 2026-11-01

Lists the addresses this organization never emails (campaigns and flows skip them), newest first, paginated by cursor: email, reason (unsubscribe: the person clicked the unsubscribe link; hard_bounce and complaint: reported by Amazon SES; manual: added by someone) and source. Filter by reason (applies to the page read: follow next_cursor until has_more is false). Requires view access to Email Marketing.

Scope
email_marketing:read
Permission
View the module
MCP tool
email_marketing_suppressions_listOn the full surface; on the compact one, mb_execute_operation with id: "email_marketing.suppressions.list".

Declared cost: up to 202 reads and 0 writes per call (they count against the daily quota).

Parameters

limitintegerqueryoptional

How many items this page brings at most (see the maximum and the default in the schema).

Default: 50

cursorstringqueryoptional

The next_cursor of the previous page, exactly as it came (only for the same list and filters); without it, the first page.

reasonenumqueryoptional

Only this reason: unsubscribe, hard_bounce, complaint or manual.

Values: unsubscribe, hard_bounce, complaint, manual

Response

dataarray<object>
has_moreboolean
next_cursorstring

Errors

Example

curl "https://api.mb-suite.com/v1/email-marketing/suppressions" \
  -H "Authorization: Bearer $MB_API_KEY"

Try it with your test API key

With a test API key the request always goes to your practice organization: example data you can reset.

curl "https://api.mb-suite.com/v1/email-marketing/suppressions" \
  -H "Authorization: Bearer $MB_TEST_KEY"
POST/v1/email-marketing/suppressions

Add an address to the suppression list

email_marketing.suppressions.add

WriteIdempotentSince 2026-11-01

Stops every email (campaigns and flows) to an address in this organization; flows drop its pending enrollments when they reach it. Use it to honor an unsubscribe request received by other means (reason unsubscribe) or to block an address (manual, the default). Idempotent: an address already on the list keeps its original reason (created false). An unsubscribe added by mistake can be undone only by the same credential, within an hour (email_marketing.suppressions.remove); after that, only the person can opt back in. Error: email_invalid. Requires full access to Email Marketing.

Scope
email_marketing:write
Permission
Edit in the module
MCP tool
email_marketing_suppressions_addOn the full surface; on the compact one, mb_execute_operation with id: "email_marketing.suppressions.add".

Declared cost: up to 1 reads and 1 writes per call (they count against the daily quota).

Parameters

emailstringbodyrequired

The address that must not get marketing emails any more.

reasonenumbodyoptional

manual (default), unsubscribe, hard_bounce or complaint.

Values: unsubscribe, hard_bounce, complaint, manual · Default: "manual"

Response

emailstring
reasonstring
createdboolean

Errors

Example

curl -X POST "https://api.mb-suite.com/v1/email-marketing/suppressions" \
  -H "Authorization: Bearer $MB_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{
  "email": "ana@example.com"
}'

Try it with your test API key

With a test API key the request always goes to your practice organization: example data you can reset.

curl -X POST "https://api.mb-suite.com/v1/email-marketing/suppressions" \
  -H "Authorization: Bearer $MB_TEST_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{
  "email": "ana@example.com"
}'
DELETE/v1/email-marketing/suppressions/{email}

Remove an address from the suppression list

email_marketing.suppressions.remove

IrreversibleSince 2026-11-01

Lets an address receive emails again. With an API key or an app only manual and hard_bounce entries can be removed: an address that unsubscribed or complained can only come back by opting in again itself (suppression_compliance_locked), except an unsubscribe that the same credential added through the API less than an hour ago (to undo its own mistake). It is not kept in the trash: add the address again if it was a mistake. Outside the screen it requires a dry run (it runs the same check, so a locked address fails there and gets no confirm_token) and a confirm_token. Not found (email_suppression_not_found) if the address is not on the list. Owners and admins only.

Needs confirmation: first dry_run: true (preview and confirm_token, valid 10 minutes and for one run), then the same body with confirm_token. In a few operations only with certain data: the description says when. Why and how: Dry run and confirm_token.

Scope
email_marketing:write and “Allow deletions” (email_marketing:delete in OAuth)
Permission
Edit in the module · Only owner, admin
MCP tool
email_marketing_suppressions_removeOn the full surface; on the compact one, mb_execute_operation with id: "email_marketing.suppressions.remove".

Declared cost: up to 1 reads and 1 writes per call (they count against the daily quota).

Parameters

emailstringpathrequired

The suppressed address (from email_marketing.suppressions.list).

Response

oktrue

Errors

Example

curl -X DELETE "https://api.mb-suite.com/v1/email-marketing/suppressions/{email}" \
  -H "Authorization: Bearer $MB_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "dry_run": true
}'

Try it with your test API key

With a test API key the request always goes to your practice organization: example data you can reset.

curl -X DELETE "https://api.mb-suite.com/v1/email-marketing/suppressions/{email}" \
  -H "Authorization: Bearer $MB_TEST_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "dry_run": true
}'