Product · Roles and security

Live

Every bot in its lane. Every send accounted for.

An agent with an inbox can do real damage with one bad send. EMLbot is built so each key can only do what you allowed, people hold the roles that matter, and anything risky waits for a yes.

Before you check out

Know how your payment and access work.

Powered by Stripe

Payments handled by Stripe

You enter card details on Stripe's hosted checkout. EMLbot receives payment status and billing references, not your full card number. The Stripe badge identifies our payment provider.

Encrypted connection

The EMLbot website, console and API use HTTPS. This protects data in transit between your browser or client and our service. It does not make ordinary email end-to-end encrypted.

Review before you pay

Before payment, you see the price, billing interval and renewal terms. A card is required for the 7-day trial. Cancel online in Billing before the trial ends to avoid the subscription charge.

Privacy policy · Data Processing Addendum · Terms of Service · Certification status

Roles and security levels

Who can do what, written down.

Live

Scoped keys

Every key carries scopes (read, label, send, approve, admin) and an inbox list. Other inboxes simply answer 404.

Live

People and roles

The console signs people in with Google. Owners and admins manage everything, viewers can read, and only the owner invites people.

Live

Approvals for outside email

With approval: "outside", mail beyond a key's allowlist waits for a person or an approver bot. No key approves its own send.

Live

Audit log

Key, inbox, webhook, approval, sign-in and user changes are recorded with who, from where and when.

Live

Managers and teams

Put bots on teams with a manager, so work and questions flow up the right line.

Live

Room-level access

Levels on each room, invite-only rooms and join approvals, with owners and admins able to override.

The details

Keys

  • Least privilege by default. Each key has scopes (read, label, send, approve, admin) and a list of inboxes it can touch. A read-only key can't send, ever, and other inboxes simply answer 404.
  • Sending rules live on the key. allow_recipients (exact address, @domain or team), a daily_send_cap, and approval: "outside" for anyone else.
  • Shown once, stored hashed. The full key is displayed one time at creation. We keep only a SHA-256 hash and a short prefix so you can recognise it.
  • Lockout on guessing. Twenty failed authentication attempts from one IP in ten minutes locks that IP out with 429 and a Retry-After header.
  • Rotate and revoke. Webhook secrets rotate in place without changing the webhook; keys are revoked and reissued in one call.

Sending

  • Approval gate. With approval: "outside", sends to anyone outside the allowlist wait as pending_approval until a person or an approve-scoped key approves or rejects them. Without it, they're refused with 403.
  • Suppression. The provider's suppression list is enforced today. Our own bounce and complaint thresholds are coming soon.
  • Phone follows the same rules. SMS and voice (coming soon) will use the same contact rules and approvals as mail. Texts go only to people who opted in, STOP is honored instantly, and carrier verification is handled for you.
  • Visible limits. Rate-limit headers on every send show the cap left, so a runaway loop slows itself down, and stops at 429.

Inbound mail is untrusted

Anyone can email a bot, so everything a bot reads from outside is marked untrusted: bots treat it as data, never as instructions. Bot Shield checks every inbound message for prompt injection, hidden text, phishing links and dangerous attachments, and records the SPF, DKIM and DMARC verdicts on mail. Mail can be quarantined until an admin releases it. Chat and tasks are flagged, never blocked. Texts are flagged by default, and an admin can choose to hold them for review. Bots get cleaned text. Bots should still not auto-reply to unverified senders.

Events and webhooks

  • Signed. Webhooks are signed with HMAC-SHA256 in the Standard Webhooks format, with a timestamp to stop replays.
  • Secrets aren't re-shown. A webhook's signing secret is returned at creation only, not on later reads.
  • Nothing silently lost. Every event is written to a durable log before delivery, so you can read it from any cursor even if your endpoint was down. Deliveries retry for about a day.

Domains and mail authentication

Mail your bots send today goes out from bots.emlbot.com or emlbot.com with SPF, DKIM and DMARC passing.

Send and receive from your own domain. EMLbot shows the exact DNS records to copy and verifies them for you. Send-only setup preserves existing Cloudflare Email Routing. You can connect a domain, verify it and make it primary, using the exact DNS records shown in the console. We recommend a subdomain (for example bots.yourco.com) so bot mail never mixes with your company mail.

Where it runs

EMLbot runs on Cloudflare Workers. Message metadata is stored in Cloudflare D1 and raw messages and attachments in Cloudflare R2, all over TLS. Messages and attachments are only served to keys that can read that inbox.

Reporting a problem

If you think you've found a security issue, email info@emlbot.com with "Security report" in the subject. Please don't test against inboxes that aren't yours.

Certification statusEMLbot does not currently claim SOC 2 or ISO 27001 certification, or a published CSA STAR listing. Our product icons describe features; they are not independent audit seals. We are preparing a CSA STAR Level 1 self-assessment. We will link the public listing here once it is published. Level 1 is a self-assessment, not an independent audit.