Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.actionlayer.dev/llms.txt

Use this file to discover all available pages before exploring further.

ActionLayer gives your AI assistant a real business email address and a full inbox — with a human approval step so nothing goes out without your sign-off. This page is the non-developer tour. If you want endpoints and code, jump to the API reference or MCP integration.

The core value prop

Your AI agent should be able to do email work the same way a junior teammate does: read what came in, draft a reply, run it past you, send it. ActionLayer is the email plumbing for that — without you having to build inboxes, write threading logic, configure DNS, or worry about deliverability. You bring an AI agent. ActionLayer brings:
  • A real email address on your own domain or subdomain (mia@yourcompany.com or help@ai.yourcompany.com).
  • A real inbox that receives mail, parses it, and threads it into conversations.
  • A draft submission flow so your AI can propose replies.
  • Approval channels (Telegram, Slack, Email) so a human gets the final say.
  • Controlled sending through Postmark with proper SPF/DKIM signing.
  • A rules engine for the cases where you don’t need the human-in-the-loop.
One-line summary: give your AI assistant a real inbox and the ability to operate through email.

How conversations work

Email isn’t messages — it’s threads. ActionLayer reconstructs every conversation by walking the standard In-Reply-To and References headers, then stores all messages from that conversation as one thread. When your agent calls get_thread, it gets:
  • All inbound messages, oldest first.
  • All outbound messages your agent (or you) have sent.
  • Any drafts attached to the thread (pending, approved, sent, rejected).
  • The contact on the other end — name, email, status (trusted / pending / blocked), tags.
This is what lets your AI write a coherent reply: it sees the full conversation, not just the latest message.

Sender identities

A sender identity is a real address. You can have:
  • One identity per agent (mia@, alex@, pat@ — three different AI assistants, one per role).
  • Multiple identities per agent (e.g. support@ and billing@ for the same backend agent, used for different inbox workflows).
Each identity has its own signature, approval channel, behavior toggles (can it cold-send? does it auto-approve replies?), and inbox.

Approval channels

When your AI submits a draft, ActionLayer pings you in whichever channel you picked.

Telegram (fastest)

You get a message from a bot with the draft preview and inline Approve / Reject buttons. Tap Approve and ActionLayer queues the send. Tap Reject and the draft is discarded; your agent can submit a new one. ActionLayer auto-registers the Telegram webhook for you the moment you save the identity — no /setWebhook calls.

Slack

ActionLayer posts to a channel of your choice (e.g. #ai-approvals) with a preview and action buttons. Same one-tap flow.

Email

ActionLayer emails you with a preview and two one-click links. No login required — the links carry signed tokens that authorize a single approval or rejection. You can also configure a secondary channel with an escalation delay. If nobody acts on the primary within (e.g.) 15 minutes, the secondary channel pings.

Sender trust gating

As of v0.25.0, ActionLayer protects your AI from arbitrary email on the public internet. When inbound mail arrives from a sender your workspace has never seen, it does not go straight into the inbox your AI reads. Instead:
  1. The message is held in inbound_pending for 30 days.
  2. You get a notification in your approval channel: “Unknown sender — approve / block?”
  3. Approve → the sender is marked trusted, the held message is reprocessed into the real thread, and your AI sees it.
  4. Block → the message is silently discarded and the sender is blocklisted.
You can also pre-trust whole domains (e.g. “always trust @yourcompany.com”) in Settings → Trusted Domains. Public mail providers (gmail.com, yahoo.com) are blocked from the trusted-domain list to prevent foot-guns. This means your agent only ever processes mail from senders you’ve explicitly approved. Cold spam, prompt-injection attempts in random newsletters, and replies-to-replies from forwarded chains all get held for human review first.

Rules engine

The approval gate is the safety net. Rules are how you remove friction for the cases where the safety net isn’t necessary. You build rules in the dashboard with a simple condition/action builder, no code:
  • Auto-approve any draft replying to a contact tagged “trusted-client”. (Skip the approval step for known-safe cases.)
  • Flag threads as urgent if the subject contains “URGENT” or “ASAP”. (Triage at ingest time.)
  • Auto-close any thread from @substack.com. (Newsletters never reach your agent.)
  • Set approval mode to manual for any draft over 500 words. (Override per-identity defaults for outliers.)
Rules run in the background after every relevant event — email.received, draft.created, draft.approved, draft.sent, draft.stale, etc. Each rule has a priority; lower number runs first. Mark stop_after_match to halt the chain when a rule matches. See the Rules API reference for the full schema.

Webhooks

ActionLayer fires webhooks at every meaningful event. Point them at your agent’s URL and you get real-time updates without polling.
EventFires when
email.receivedAn inbound message lands and is parsed
draft.createdAn agent submits a draft
draft.approvedA draft is approved
draft.rejectedA draft is rejected
draft.sentAn approved draft was successfully delivered
draft.staleA draft was blocked from sending because a newer inbound arrived
email.deliveredPostmark confirmed delivery
email.bouncedPostmark reported a bounce
Every webhook is HMAC-signed. See Code Examples → Webhook receiver for verification code.

Team members and roles (coming soon)

Owner / Approver / Viewer. Every workspace starts with one Owner (the person who signed up). You can invite teammates and assign:
  • Owner — full access, including billing and team management.
  • Approver — can approve drafts and manage day-to-day operations.
  • Viewer — read-only access to threads and reports.
The team-invite acceptance flow ships in a future sprint (INVITE_ENABLED is currently false in v0.26.7). The Team page shows existing members and roles, but the “Invite member” button is disabled with a “coming next sprint” indicator. The page UI is otherwise live for early-user feedback.

Pricing

PlanPriceOutboundInboundIdentitiesRulesDomains
Builder PackFree50 lifetime50 lifetime101
Pro$29/mo5,000/mo10,000/mo10253
Business$79/mo15,000/mo30,000/mo5010010
Builder Pack is the free tier with a lifetime cap of 50 emails inbound and 50 emails outbound. It’s not a monthly allowance — counters never reset. It’s there so you can build and test your integration before committing to a paid plan. All paid plans include the approval workflow, inbound email, conversation threading, automation rules, approval notifications, webhooks, and team members.

What’s NOT included

ActionLayer is deliberately scoped. We don’t try to be the AI, and we don’t try to be a marketing tool.
  • No AI generation. ActionLayer never calls OpenAI, Anthropic, or any model. Your agent (Claude, GPT, n8n flow, custom Python — your choice) does the writing. We do the email plumbing.
  • No email marketing. No campaigns, no broadcasts, no list management, no tracking pixels. TrackOpens and TrackLinks are hardcoded false on every send. If you want Mailchimp, use Mailchimp.
  • No domain registration. You bring your own domain. We give you the four DNS records to add at your registrar.
  • No mail-server hosting. AWS SES handles inbound, Postmark handles outbound. ActionLayer orchestrates them — but the actual email transport is run by people whose entire job is email transport.
  • No bulk send. The API rate limits and plan caps will quickly push back if you try to use ActionLayer as a blast tool. That’s intentional.

Common questions

Do I need to know how to code? For setup, no — domains, identities, approval channels, and rules are all dashboard work. You only need a developer (or a developer-friendly agent framework like OpenClaw, n8n, or Zapier) for the step where your AI agent actually connects to ActionLayer. Does this work alongside my existing email? Yes. Use a subdomain (mail.yourcompany.com) and ActionLayer sits next to your Google Workspace / Microsoft 365 setup without touching it. The dashboard suggests a subdomain automatically when it detects existing email records on the root domain. Can my agent send without my approval? Yes — flip auto_approve_replies on the identity, or write a rule that auto-approves specific cases. By default, every draft waits for a human. What happens if a new email arrives while a draft is waiting? ActionLayer flags the draft as stale and blocks delivery (HTTP 409 on send). You’ll be notified to review the new message first. This prevents your agent from sending a reply that ignores something that just came in. What agents work with ActionLayer? Anything that can make HTTP requests: LangChain, CrewAI, n8n, Zapier, AutoGen, custom Python or Node, or any MCP-compatible client (Claude Code, Codex, OpenAI Agents SDK). For OpenClaw specifically, we ship an AgentSkill bundle. Where do I get help? support@actionlayer.dev, or open an issue on GitHub.