The execution layer for AI agents

Your agent decided to send it. Truncus makes sure it actually happened.

The only execution layer built for autonomous agents. EU-resident sending (AWS SES, Ireland), durable retry queue, fail-fast circuit breakers, and governance — infrastructure that never fails silently on your agent workflows.

Traditional email APIs weren't built for agents

They return a message ID and hope for the best. Your agent can't hope. It needs to know:

  • Did the email actually get delivered?
  • If it bounced, why? Is it retryable?
  • If the provider went down, did it fail silently?
  • Is the agent sending too many emails?
  • Can I stop all sending instantly if something goes wrong?

Truncus answers all of these. In the same API call.

Agent sends invoice with delivery proof

Synchronous — agent knows immediately if it worked

terminal
# Synchronous — agent knows immediately if it worked
curl -X POST https://truncus.co/api/v1/emails/send_sync \
  -H "Authorization: Bearer tr_live_…" \
  -H "Idempotency-Key: <uuid>" \
  -d '{ "from": "billing@yourapp.com", "to": "customer@example.com",
        "subject": "Your invoice", "html": "<p>Thanks.</p>" }'

# Returns:
{
  "message_id": "cmvxr6q4q000120ajvvjpxhq8",
  "global_message_id": "gm_8b96f356-f7e9-472e-bbe4-88a9be1651b5",
  "status": "delivered",
  "delivered_at": "2026-11-01T11:35:11.909Z",
  "smtp_response": "250 2.0.0 Ok: queued as 4jHXnV4rtkz9vNPx",
  "latency_ms": 2080
}

Durable operation with automatic retry

Truncus retries on SES with backoff until it succeeds or exhausts the policy

agent.py
# Create a durable operation — Truncus retries for you
op = truncus.operations.create(
    type="email.send",
    delivery_guarantee="at_least_once",
    params={
        "from": "support@yourapp.com",
        "to": user.email,
        "subject": "Your account is ready",
        "html": welcome_html,
    },
    retry_policy={"max_retries": 3, "backoff_ms": 5000},
)

# Check later (or let the webhook notify you)
status = truncus.operations.get(op.operation_id)
# { status: "completed", attempts: 1, provider: "ses" }
# Retries happen on SES (eu-west-1) with backoff — never silently dropped

Pre-flight check before sending

Validate before wasting a send or risking reputation

agent.py
# Validate before wasting a send
check = truncus.emails.validate(
    from_address="agent@yourapp.com",
    to=prospect.email,
)

if check.recommendation == "do_not_send":
    skip_prospect(prospect.id, reason=check.checks.spam_risk)
elif check.confidence_score > 0.8:
    send_email(prospect)  # see the curl call below

# curl -X POST https://truncus.co/api/v1/emails/send_sync \
#   -H "Authorization: Bearer tr_live_…" \
#   -H "Idempotency-Key: <uuid>" \
#   -d '{ "from": "agent@yourapp.com", "to": "prospect@example.com",
#         "subject": "Partnership opportunity", "html": "<p>Hello.</p>" }'

Everything agents need

Execution certainty

send_sync

Synchronous delivery confirmation. One call, one answer.

Delivery guarantees

best_effort / at_least_once / exactly_once. Choose per email.

Reliability

EU-resident sending

AWS SES in Ireland (eu-west-1). Circuit breakers detect failures fast and surface the exact error — no silent failures.

Zero email loss

Failed emails enter a durable retry queue (30s/2m/8m/30m/2h backoff). Dead-letter recovery. Replay API.

EU data residency

Sending from Ireland, email data stored in Frankfurt.

Intelligence

Pre-send validation

Confidence scoring, spam risk, domain health. Know before you send.

Post-send intelligence

Failure explanations and recommended next actions.

Inbound classification (coming soon)

Detect replies, unsubscribes, complaints, auto-replies.

Safety

Kill switch

Stops all sending for the whole account. One API call; resume from the dashboard.

Recipient cooldowns

Prevent over-emailing the same address.

Reputation engine

Auto-throttle agents with high bounce or complaint rates.

Works with your agent stack

MCP

8 Truncus tools — Claude Code, Cursor, VS Code

Python SDK

pip install truncus

Node SDK

npm install @truncus/email

REST API

Any language, any framework

CLI

npm install -g @vanmoose/truncus-cli

Use Truncus inside your AI editor

Generate an API key once at truncus.co/dashboard/settings/api-keys, drop it into your editor's MCP config, and your agent can send and verify email without leaving the IDE. Works in any MCP client — Claude Code, Cursor, VS Code (Cline / Continue), Claude Desktop, Windsurf.

Claude Code

One command in your terminal

terminal
# Register the 8 Truncus tools in one command
claude mcp add truncus \
  --env TRUNCUS_API_KEY=tr_live_xxx \
  -- npx -y @vanmoose/mcp-server

Cursor · VS Code · Claude Desktop · Windsurf

Add to your MCP config file (e.g. ~/.cursor/mcp.json)

mcp.json
{
  "mcpServers": {
    "truncus": {
      "command": "npx",
      "args": ["-y", "@vanmoose/mcp-server"],
      "env": { "TRUNCUS_API_KEY": "tr_live_xxx" }
    }
  }
}

8 Truncus tools, ready to call

truncus_sendtruncus_send_synctruncus_validatetruncus_get_emailtruncus_list_eventstruncus_get_statstruncus_list_domainstruncus_check_suppression

Your Agent (LangChain / CrewAI / AutoGen / Custom)

Truncus

Execute, validate, govern, observe

AWS SES — Ireland (eu-west-1)

EU-resident sending

Pricing

All plans include send_sync, delivery guarantees, and governance.

Free

€0

3,000 emails/month

Pro

€19/mo

50,000 emails/month

Scale

€99/mo

300,000 emails/month

USD pricing applies outside the EU

Send your first email with delivery confirmation

Free tier. 3,000 emails/month. No credit card. 30 seconds to first send.

Start free
Truncus for AI Agents — The Execution Layer for Agent Communication