Quickstart
This walkthrough takes you from signup to a dispatched first batch in five minutes. We’ll use curl throughout — port to your stack of choice. The base URL is https://ampout.fly.dev.
1. Sign up
Section titled “1. Sign up”curl -X POST https://ampout.fly.dev/signup \ -H "Content-Type: application/json" \Response:
{ "account_id": "...", "plan_slug": "free", "api_key": { "id": "...", "prefix": "ak_live_abcd", "plaintext": "ak_live_abcd...XYZ" }}Save the plaintext key. It’s only returned once. Free tier includes 100 sends/month.
For the rest of this guide, set:
export AMPOUT_KEY="ak_live_..."2. Set up an SMTP credential and a 2-step sequence
Section titled “2. Set up an SMTP credential and a 2-step sequence”You’ll bring your own SMTP provider. SMTP2GO works well; Postmark, Mailgun, AWS SES, even Gmail App Passwords are all supported. The credential lives on a campaign:
curl -X POST https://ampout.fly.dev/campaigns \ -H "Authorization: Bearer $AMPOUT_KEY" \ -H "Content-Type: application/json" \ -d '{ "campaign": { "name": "First test", "min_wait_seconds": 120, "max_wait_seconds": 420, "verify_email_mx": true, "smtp_credentials": [{ "label": "Primary", "smtp_host": "mail.smtp2go.com", "smtp_port": 587, "smtp_username": "<your smtp username>", "smtp_password": "<your smtp password>", "from_name": "Your Name", "from_email": "[email protected]", "daily_limit": 100 }], "sequence_steps": [ { "position": 1, "subject": "Quick question for {{company}}", "body_html": "<p>Hi {{first_name}},</p><p>Saw {{company}} is doing X. Curious how you handle Y?</p><p>Best,<br>You</p>", "delay_minutes": 0 }, { "position": 2, "subject": "Re: Quick question", "body_html": "<p>Hi {{first_name}}, just bumping this in case it got buried.</p>", "delay_minutes": 4320 } ] } }'min_wait_seconds / max_wait_seconds add randomized jitter between sends within a batch — stays under spam-filter thresholds. verify_email_mx: true does a DNS MX lookup at dispatch time and marks any contact whose domain can’t receive mail as bounced before the SMTP attempt.
Save the returned id as CAMPAIGN_ID.
3. Import contacts
Section titled “3. Import contacts”curl -X POST https://ampout.fly.dev/contact_imports \ -H "Authorization: Bearer $AMPOUT_KEY" \ -H "Content-Type: application/json" \ -d '{ "contact_import": { "name": "Test list", "contacts": [ {"email": "[email protected]", "first_name": "Ada", "company": "Acme"}, {"email": "[email protected]", "first_name": "Babs", "company": "Acme"}, {"email": "[email protected]", "first_name": "Carol", "company": "Beta"} ] } }'Save the import id as IMPORT_ID.
4. Enroll the import into the campaign
Section titled “4. Enroll the import into the campaign”curl -X POST "https://ampout.fly.dev/campaigns/$CAMPAIGN_ID/enroll" \ -H "Authorization: Bearer $AMPOUT_KEY" \ -H "Content-Type: application/json" \ -d "{\"contact_import_id\": \"$IMPORT_ID\", \"batch_size\": 50}"Response: { "enrolled": 3, "batches": 1, "batch_size": 50, "skipped": [] }
5. Dispatch batch 1
Section titled “5. Dispatch batch 1”curl -X POST "https://ampout.fly.dev/campaigns/$CAMPAIGN_ID/dispatch" \ -H "Authorization: Bearer $AMPOUT_KEY" \ -H "Content-Type: application/json" \ -d '{"batch_number": 1}'Response: { "batch_number": 1, "enrollment_count": 3, "status": "dispatching" }
Three step-1 emails go out immediately (with jitter); three step-2 emails are scheduled to fire 3 days later.
6. Watch the stats
Section titled “6. Watch the stats”curl "https://ampout.fly.dev/campaigns/$CAMPAIGN_ID" \ -H "Authorization: Bearer $AMPOUT_KEY" | jq .You’ll see totals (pending / sent / opened / replied / bounced), rates (bounce / open / reply percentages), per-batch breakdown, recent bounces, credential health, and skip counts.
7. (Optional) Wire up a webhook
Section titled “7. (Optional) Wire up a webhook”curl -X POST https://ampout.fly.dev/webhooks \ -H "Authorization: Bearer $AMPOUT_KEY" \ -H "Content-Type: application/json" \ -d '{"webhook": {"url": "https://your-domain.com/webhooks/ampout", "event_filters": ["enrollment.replied"]}}'The response includes a secret (only shown once). Use it to verify HMAC signatures on incoming events. See the Webhooks guide.
What’s next
Section titled “What’s next”- Drive it from an LLM: install the MCP server and ask Claude or Cursor to manage your campaigns.
- Idempotent retries: see Authentication.
- All endpoints: API reference.