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.
What it does
Section titled “What it does”- 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.
What it doesn’t do
Section titled “What it doesn’t do”- 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.
Quick example
Section titled “Quick example”# 1. Sign up — free tier, 100 sends/mocurl -X POST https://ampout.fly.dev/signup \ -H "Content-Type: application/json" \# 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 sequencecurl -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": "[email protected]", "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 dispatchcurl -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": "[email protected]", "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.
What’s next
Section titled “What’s next”- 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