Isolate Email Streams With Motor Blocks
A Motorical SMTP Motor Block is an isolated sending stream for one project you run, test, or ship (similar to a per-app/per-tenant ESP project): its own domain, auth method, API keys, SMTP credentials (except marketing blocks, which have neither — see below), rates, logs, webhooks, and automation. Also known as an SMTP Block. Total control per project.
Use a separate Motor Block for each app, staging vs production, tenant, or domain so unrelated email traffic never shares credentials, rates, logs, or webhook events.
What a Block Separates
Each block can have its own:
- verified sender domain
mk_live_...Motor Block API keys- SMTP credentials
- rate limits and usage counters
- delivery logs and timelines
- webhook endpoints
- operational and deliverability controls
Common Patterns
| Situation | Recommended setup |
|---|---|
| One product with production and staging | One production block and one staging block |
| Multiple apps under one company | One block per app |
| Multiple sending domains | One block per domain |
| Different traffic risk profiles | Separate marketing, transactional, and test streams |
| Tenant-specific domains or webhooks | Separate tenant blocks when isolation matters |
| Legacy app that sends SMTP | SMTP Block for that app |
| Modern backend that sends by API | HTTP Send API with a Motor Block API key |
Transactional or General-Purpose?
A Motor Block has a type. Use transactional for low-risk, time-critical one-to-one mail — receipts, password resets, verification codes — and general_purpose for the wider lane of everything else you send from an application. Keeping the two in separate blocks means a noisy stream can't drag down the reputation of the mail your users are waiting for. You can switch a block between the two later without touching its credentials, domain or history, and an AI agent can do so with motorical_motor_block_change_type (see Hosted MCP). Marketing Motor Blocks are different from transactional/general_purpose. A marketing block is a sender identity for Communications (campaigns, lists, templates). It has no SMTP login and no API key of its own. You send through campaigns in the dashboard, or through the Comms Block API with your account API key and a workspace. For transactional email (receipts, password resets) use a transactional block.
| Comms-managed ("… — Campaigns") | Manual (Create dialog) | |
|---|---|---|
| Sends via | Comms Block: dashboard campaigns, Comms API (account API key + X-Tenant-Id) | Same |
| Own SMTP / API key | None | None |
| Created | Automatically when you pick a sending domain in Comm → Workspaces | By you, then assigned under Comm → Workspaces → Advanced |
| Editable in Motorical dashboard | No (managed from Comm) | Rename, pause, delete |
POST /v1/send with a marketing block returns 403 use_comms_api; SMTP authentication for a marketing block is refused by the SMTP gateway. The type of a block cannot be changed to or from marketing; create a new block instead.
Renaming a block only changes its display name — it never changes the SMTP username or any credential.
Example Architecture
Account
├── App A Production Block
│ ├── domain: app-a.example.com
│ ├── auth: mk_live_... + SMTP credentials
│ ├── rates: production policy
│ └── webhooks: https://app-a.example.com/webhooks/motorical
├── App A Staging Block
│ ├── domain: staging-mail.example.com
│ ├── auth: separate test credentials
│ └── webhooks: staging endpoint
└── App B Production Block
├── domain: app-b.example.com
├── auth: independent credentials
└── logs: separate delivery history
Why This Helps
Blocks make email infrastructure easier to reason about:
- A staging bug cannot pollute production analytics.
- A leaked test key does not send from the production block.
- A webhook integration can be tested without receiving production events.
- A high-volume stream can have different rates from transactional mail.
- A tenant or app can be audited through its own logs.
AI Agent Guidance
When an AI assistant designs a Motorical integration, it should ask what boundary matters most:
- application
- environment
- domain
- tenant
- traffic type
- risk level
Then choose the Motor Block that matches that boundary before generating code. If none exists yet, and the account is subscribed, an agent connected to the hosted MCP Motor Blocks server can create one with motorical_motor_block_create on a verified domain and use it immediately by its motorBlockId — no re-authorization needed. Credentials are never returned to the agent; they stay in the dashboard.