Skip to content

Changelog

The format follows Keep a Changelog and the project follows Semantic Versioning.

The canonical changelogs live alongside the code:

  • Multi-tenant Account model. Every API key, request log, outreach, campaign, contact import, and contact is scoped to an account.
  • accounts:bootstrap rake — idempotent founder-account creation + backfill of unattached resources.
  • Cross-account isolation enforced (cross-tenant access returns 404, never leaks).
  • Configurable per-campaign bounce_rate_threshold (default 8.0, range 0.5–25.0).
  • Per-send bounce rate calculation (matches SMTP2GO’s denominator).
  • Plan model + 5 default plans (Free / Hobby / Pro / Scale / Founder).
  • UsageRecord model + dispatch soft-cap when over plan limit (returns 402 plan_limit_reached).
  • Stripe billing: customer creation at signup, webhook handler, POST /billing/checkout, POST /billing/portal, GET /billing/subscription, GET /billing/usage, public GET /plans.
  • Outbound webhooks: Webhook + WebhookDelivery models, full CRUD endpoints, HMAC-SHA256 signing, retry-on-5xx with auto-disable at 5 consecutive failures, 7 event types.
  • POST /signup (public) + POST/GET/DELETE /api_keys (Bearer-auth) for self-serve account creation and key management.
  • Idempotency-Key support on all mutating POST endpoints (24h replay, 409 on key+different-body conflict).
  • rack-attack rate limiting: 60 req/min per API key, 5 signups/hour per IP.
  • Structured error envelope: { code, type, message, details? } with RFC-7807-flavored type URI.
  • Per-account limits_concurrency on SendEmailJob (10), CampaignDispatcherJob (3), WebhookDeliveryJob (10).
  • Campaign#stats and CampaignHealthMonitorJob compute bounce rate against SUM(sends_count) rather than enrollment count.
  • ApiKey.issue! requires an account: keyword argument.
  • Every error response now uses render_error(:code) with the unified envelope.

Initial private deployment.

  • Multi-step outreach campaigns with batch dispatch, pause/resume, daily caps.
  • Per-credential SMTP rotation with auto-disable on bounce-rate threshold.
  • IMAP reply detection.
  • Open tracking pixel.
  • Cross-campaign dedup via Outreach model.
  • Token-based unsubscribes + List-Unsubscribe header.
  • Dispatch-time MX verification.
  • SMTP2GO inbound webhook (bounce events).
  • EnrollmentSkip persistence with kind/reason.
  • API-key authentication with SHA-256 hashed tokens (ak_live_... prefix).
  • RequestLog and /usage endpoint with per-client-kind breakdown.
  • /replies endpoint.
  • Send-forecast endpoint.
  • @ampout/mcp-server (TypeScript) — 11 tools callable from Claude Desktop, Cursor, and any MCP client.