Skip to content

Introduction

Ampout is a REST API for multi-step cold outreach sequences — the kind of “send → wait 3 days → follow up → wait 7 days → break up” flows you’d otherwise build yourself on top of Sidekiq, Redis, SES, and a reply-parsing inbox. It also ships with an MCP server so any LLM (Claude Desktop, Cursor, agent frameworks) can drive your campaigns directly.

  • Multi-step sequences with configurable per-step delays.
  • Per-account SMTP — bring your own provider (SMTP2GO, Postmark, Mailgun, etc.). Reputation is yours, not ours.
  • Reply detection via IMAP, with auto-reply / vacation-responder filtering built in.
  • Bounce handling synchronized from sync SMTP errors and provider webhooks (SMTP2GO supported).
  • Open tracking via 1×1 pixel; unsubscribe via signed token + List-Unsubscribe header.
  • Cross-campaign dedup — group parallel campaigns under an Outreach and a contact only lands in one.
  • Outbound webhook events for every state change: enrollment.sent/opened/replied/bounced/unsubscribed, credential.disabled, campaign.paused. HMAC-signed Stripe-style.
  • Automatic billing & metering via Stripe — dispatcher soft-caps at the plan’s monthly send limit.
  • Idempotency keys on every mutating endpoint. Retries are safe.
  • Per-account rate limiting + concurrency — one tenant can’t starve another’s worker pool.
  • No dashboard ships with the API. You integrate it into your own product, drive it from an LLM, or use the API directly. The MCP server is the recommended frontend.
  • No shared SMTP infrastructure. You bring your own provider. Deliverability is yours.
  • No AI copy generation. Your LLM does that better than we could.
Terminal window
# 1. Sign up — free tier, 100 sends/mo
curl -X POST https://ampout.fly.dev/signup \
-H "Content-Type: application/json" \
-d '{"email": "you@example.com", "name": "You"}'
# Response: { account_id, plan_slug, api_key: { id, prefix, plaintext } }
# Save the plaintext key — you won't see it again.
# 2. Create a campaign with an SMTP credential and a 2-step sequence
curl -X POST https://ampout.fly.dev/campaigns \
-H "Authorization: Bearer ak_live_..." \
-H "Content-Type: application/json" \
-d '{
"campaign": {
"name": "Q2 launch",
"smtp_credentials": [{
"smtp_host": "mail.smtp2go.com", "smtp_port": 587,
"smtp_username": "...", "smtp_password": "...",
"from_name": "Ada", "from_email": "ada@yourdomain.com",
"daily_limit": 200
}],
"sequence_steps": [
{"position": 1, "subject": "Quick q for {{company}}", "body_html": "<p>Hi {{first_name}}...</p>", "delay_minutes": 0},
{"position": 2, "subject": "Re: Quick q", "body_html": "<p>Following up...</p>", "delay_minutes": 4320}
]
}
}'
# 3. Enroll contacts via a ContactImport, then dispatch
curl -X POST https://ampout.fly.dev/contact_imports \
-H "Authorization: Bearer ak_live_..." \
-H "Content-Type: application/json" \
-d '{"contact_import": {"name": "Q2 list", "contacts": [
{"email": "lead@acme.com", "first_name": "Lead", "company": "Acme"}
]}}'
curl -X POST https://ampout.fly.dev/campaigns/<id>/enroll \
-H "Authorization: Bearer ak_live_..." \
-d '{"contact_import_id": "<import_id>"}'
curl -X POST https://ampout.fly.dev/campaigns/<id>/dispatch \
-H "Authorization: Bearer ak_live_..."

The full step-by-step is in the Quickstart.

  • Quickstart — send your first sequence in 5 minutes
  • Authentication — API keys, idempotency, rate limits
  • MCP server — drive ampout from Claude Desktop, Cursor, or any agent
  • Webhooks — real-time events for every state change
  • API reference — every endpoint, every error code