MOLTED EMAIL

Billing & Plans

Plans, email limits, free tier, upgrading via Stripe, and managing your subscription.

Plans are priced by mailbox: you pick how many mailboxes your agents run, and each plan comes with separate monthly allowances for sends and inbound email. Every plan gets the whole product, including all the security features below. The public pricing page has the same numbers.

Plans

PlanPriceMailboxesCustom domainsSends/moDaily limitHourly limitInbound/moHumanizer rewrites/moStorageRetention
Free$03 (shared domain)03,000100 (ramps up, see Free plan)401,0000100 MB14 days
Solo$19/mo10310,0001,0002005,000503 GB30 days
Team$79/mo501050,0005,0001,00025,00030010 GB90 days
Contact usCustomMore than 50CustomCustomCustomCustomCustomCustomCustomCustom

Inbound allowance

Email you receive has its own monthly allowance (the Inbound/mo column) and never uses your send allowance, so nobody outside can use up your sending by emailing you. Mail quarantined as spam, phishing or malware, or for prompt injection, never counts. Inbound email is never rejected or bounced:

  • Solo and Team -- past the allowance everything is still delivered, and inbound email past it is billed as overage (about $0.50 per 1,000) on your next invoice.
  • Free (and a new account before it picks a plan) -- past the allowance new email is still received and stored, but it's held from your agents until the start of next month, or until you move to a paid plan, which releases it right away. The account owner gets an email when this starts.
  • A paid plan's 3-day trial -- the trial includes 300 inbound emails; past that, new email is held until the trial ends and your plan starts (or you start it now).
  • Expired accounts (the plan ended, or a failed payment's grace period ran out) -- new email is still received and stored, but all of it is held from your agents until you pay for a plan (or Molted support sets one), which releases it right away. Free is not available once a paid plan has ended. It is not released at the start of a month while the account stays expired. The owner gets one email a month saying how many are waiting. Mail delivered before the plan ended isn't affected, and your data is kept for at least 30 days after the plan ends.
  • Solo and Team also email the owner once a month if inbound reaches twice the allowance, so a spike doesn't go unnoticed.

While a message is held, agents don't see its subject, sender name, body or attachments, and a thread it started doesn't show in the thread list. Further mail from the same sender joins that thread rather than starting new ones, so the conversation stays in one thread. When it's released, the thread shows up as new mail and an inbound.released event fires (SSE and webhooks). Held messages can't be released or rejected by hand.

The portal shows how many emails are waiting (a "23 waiting" badge in the top bar, a card on Home, a count per mailbox, and next to inbound usage in Settings > Plan), and why. molted billing status has an inbound block (allowance, used, remaining, overage, held, heldReason: over_allowance, paid_trial or plan_expired, overAllowanceBehavior, warning), and molted budget shows inbound next to the send windows. A message held for the allowance shows up in the inbox list with inbound_quota_held: true and its body hidden until it's released.

Sends to your team

Sends to your own verified team addresses don't count toward your send allowance, on every plan including Free: not toward the monthly or daily limits, a trial's total or overage. They still count toward the hourly limit and go through every other check. Verified team addresses are your members' verified emails plus notification addresses someone confirmed through the link we email them, up to 3 on Free, 10 on Solo and 25 on Team. See Rate Limits.

On every plan

Plans differ in mailboxes, domains and volume, not in security. Free included, every plan gets:

  • Prompt-injection screening of every inbound email, with high-risk messages quarantined by default. See Safety settings.
  • Canary tokens in every thread: a reply that repeats one is blocked by default.
  • Thread checks: a sender new to a thread who flips what it's about is held for a person by default, and for seven days after a high-risk message, your agent's replies on that thread wait for a person.
  • The send policy: duplicates, cooldowns, suppressions and send limits, checked before anything leaves. See Rules and Suppressions.
  • Autonomy levels and approvals per mailbox, and thread handoff to a person. See Autonomy levels.
  • An audit log of sends, policy blocks, approval decisions and mailbox changes.
  • API keys scoped to mailboxes, with read, send or manage rights on each. See API keys.

Overage and credits

Solo and Team keep working when you pass the monthly allowance, once the trial is over:

  • Sends: about $1.50 per 1,000 past the allowance, billed on your next renewal invoice (everything sent since the previous one, whatever day your plan renews), up to twice the allowance. Past that cap a send is refused with overage_cap_exceeded. The daily and hourly limits still apply.
  • Inbound email: about $0.50 per 1,000 past the allowance, on the next invoice. Quarantined spam never counts. See Inbound allowance.
  • Humanizer rewrites: credits at $0.02 each, up to twice the allowance, billed on the next renewal invoice (not on a plan set by Molted support, which gets the allowance only). Past that (and on Free, which doesn't include the humanizer) emails still send, just not rewritten. See Humanizer.

Overage and credits count against the plan you were on when you used them: after a mid-month upgrade, overage from before it is still on the next invoice. If a subscription ends, overage and credits from its last period are not billed, and a new subscription starts clean.

Free and a paid plan's trial have no overage: their monthly send allowance is a hard stop until the next month (or the end of the trial).

See Mailboxes and Storage for details on mailbox and storage limits.

Free plan

Every new account starts in a trial state. Sends are blocked until you activate a plan.

Before your trial ends, you can activate the Free plan to keep sending without a credit card:

  • No credit card required -- activate it in Settings > Plan in the portal.
  • 3,000 sends a month, up to 100 a day and 40 an hour.
  • A ramp for new accounts -- Free sends from our shared domain, so a new Free account starts lower and steps up by age: 20 a day in week 1, 50 a day in week 2, then the full 100 a day. The weeks count from when you activated Free. If your emails bounce or draw spam complaints (a bounce rate above 5% or a complaint rate above 0.1%), the ramp holds at its current step until that recovers. molted budget shows the daily limit in effect, and during the ramp daily.freeRamp shows the step, whether it's held, and when the next step applies.
  • 1,000 inbound emails a month. Past that, new email is still received but held from your agents until next month or until you upgrade (see Inbound allowance).
  • 3 mailboxes on the shared domain, 100 MB storage, 14-day retention.
  • Every security feature -- injection screening, the send policy, approvals, API keys, everything.

Free is for verified humans only, on a real email address. It's the one plan that needs no card and no checkout, which makes it the easiest path to abuse, so it activates only when the account owner is a verified human -- signed up through the portal with a confirmed email address that isn't a disposable/throwaway domain. This rule always applies; it isn't something a workspace's human-gate setting can loosen.

An account created through the CLI or the API (molted auth signup, or any signup that identifies itself as an agent) is agent-owned and cannot activate Free:

curl -X POST https://mailbox.molted.email/v1/billing/activate-free \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'
# -> 403 { "error": "free_plan_requires_human", "plans": ["solo", "team"], "setupLinkRoute": "/v1/billing/setup-link", ... }

For Free, run molted auth login-link --next "/app/settings#plan" and follow what it returns: your human takes the account over by email (when its address is their own inbox) or claims the workspace with a link you give them (see Links for your human), and then activate-free works, also with your existing key. Or buy a paid plan -- see Free trial (paid plans) below. A human owner whose email isn't verified yet gets 403 { "error": "email_verification_required" } until they verify. A verified human owner on a disposable email domain (mailinator.com and the like) gets 403 { "error": "disposable_email_not_allowed", "plans": [...], "setupLinkRoute": "..." } -- use a real address, or buy a paid plan. A false positive can be allowlisted with the DISPOSABLE_EMAIL_ALLOWLIST env var (comma-separated domains).

For a verified human owner, activation works from the portal (Settings > Plan, click Activate free plan) or the CLI:

molted billing activate-free
# -> { "plan": "free" }

The route needs a key with manage scope on all mailboxes. Two more refusals are 400: activating from any plan other than trial (Cannot activate free plan from "<plan>" plan. Only trial accounts can activate the free tier.), and a workspace whose plan is set by Molted support.

Existing Free tenants (activated before this rule shipped, or granted by an admin) keep their plan -- nothing here claws it back.

Free sending can be paused platform-wide. Free accounts share our sending infrastructure, so if it's being abused, Molted can pause sending for every Free account at once. While it's paused, sends from a Free account are blocked with the reason free_sends_paused (see Errors); journeys and scheduled follow-ups wait and resume on their own, and approvals stay pending. Paid plans are never paused this way.

You can upgrade to a paid plan at any time.

Free trial (paid plans)

When a new account picks Solo or Team for the first time, it starts with a 3-day free trial. Upgrading from Free has no trial: the paid plan and its full limits start right away (and any inbound held for the Free allowance is released). An email address whose earlier account was deleted can sign up again, but its new account gets no second trial: its first paid plan starts right away, as if you had skipped the trial. GET /v1/billing/status reports this as trialEligible.

  • Credit card required -- collected via Stripe Checkout upfront. You won't be charged until the trial ends.
  • Trial limits -- 100 emails in total, 3 mailboxes, 1 custom domain, 300 inbound emails and 5 humanizer rewrites.
  • Auto-converts -- after 3 days your chosen plan activates, billing begins and the full plan limits apply.

Skipping the trial

Don't need the trial? Skip it at checkout and your plan starts right away:

molted billing setup --plan solo --skip-trial

Or send "skipTrial": true to POST /v1/billing/setup-link.

POST /v1/billing/setup-link takes plan (solo or team, default solo; the legacy names starter and growth are aliases), skipTrial, and optional successUrl / cancelUrl (http or https; they default to the portal's Settings > Plan). It returns { "url": "<Stripe Checkout URL>", "plan": "solo" }, needs a key with manage scope on all mailboxes, and is refused with 400 when the workspace already has an active paid subscription (change plans in the billing portal instead). The CLI flags are --plan, --skip-trial, --success-url and --cancel-url. MCP: billing_checkout_link (plan, skip_trial).

Start your plan now

Already in a trial and need the full limits? End the trial early. Your card is charged now and the full plan limits apply immediately. In the portal, go to Settings > Plan and click Start my plan now, or:

molted billing start-now
# -> { "started": true, "plan": "solo", "status": "active" }

Or call POST /v1/billing/start-now. molted billing status shows "canStartNow": true while this is possible. If the payment fails, nothing changes and your trial continues; if your bank asks for 3D Secure, finish the payment from Manage in Settings > Plan.

Starting a plan spends money, so it's a human decision. Through the API or CLI it needs an admin-scoped key on all mailboxes, and on the default (enforce) human gate an agent gets 403 human_decision_required (kind: "billing") with a link to hand to a person, who clicks Start my plan now in the portal. A workspace whose human gate is warn lets it through with a deprecation header, and off allows it. Without a trialing subscription the call is a 400; if the payment fails it returns 402 (payment_action_required when the bank wants 3D Secure, payment_failed otherwise).

Expired state

Your account enters the expired state when:

  • Your paid subscription is cancelled, or stops paying (including a paid plan's trial that doesn't convert)
  • A payment fails and the grace period (7 days by default) expires
  • A plan set by Molted support ends

A new account that hasn't picked a plan yet stays in the trial state; it doesn't expire on its own.

In expired state the portal remains accessible (read-only) but all sends are blocked with reason subscription_expired, and attachment uploads (POST /v1/attachments) are refused with 402 and error subscription_expired. You can still list and download your attachments. To resume sending, subscribe to a paid plan:

molted billing setup --plan solo
# Returns a Stripe Checkout URL -- open it, or hand the workspace to your human
# (a take-over email or a claim link while no person owns it, else the portal):
molted auth login-link

Note: activate-free is only available from the trial state. Once expired, you must subscribe to a paid plan.

Checking billing status

Run molted billing status (GET /v1/billing/status; MCP billing_status) to see your current plan, whether sends are blocked, and what actions are available.

{
  "plan": "trial",
  "state": "needs_payment_setup",
  "sendBlocked": true,
  "hasPaymentMethod": false,
  "actions": ["setup_billing", "activate_free"],
  "sellablePlans": ["solo", "team"]
}

The full response also carries inTrial, trialDaysRemaining, trialEligible, canStartNow, inGrace, graceDaysRemaining, limits (the plan limits in effect), activateFreeBlockedReason, and usage blocks: overage, humanizer, inbound, mailboxes, storage and domains.

actions includes "activate_free" only when the account owner is a verified human on a non-disposable email domain -- an agent-owned account (e.g. one created through the CLI), an unverified human owner, or a verified human owner on a disposable domain all see actions: ["setup_billing"] instead, since activate-free would just 403 for them. When it's missing, activateFreeBlockedReason says why ("free_plan_requires_human", "email_verification_required", or "disposable_email_not_allowed"; null otherwise). sellablePlans always lists the paid plans a checkout will sell.

The actions array tells you what you can do next. Here is what each billing state means and the commands to run:

StateSendsWhat to do
needs_payment_setupBlockedActivate the free plan or upgrade to a paid plan (see commands below). actions: setup_billing, plus activate_free when the owner qualifies.
payment_okAllowedNo action needed -- you're all set (paid, Free, a paid trial with a card, or a plan set by Molted support). actions is empty.
payment_action_requiredAllowed (temporarily)actions: update_payment_method. Update your payment method in the portal: molted auth login-link gets a link for your human (they sign in with their own account), then Settings > Plan and Manage.
payment_failed_graceAllowed (grace period)actions: update_payment_method. Update your payment method before the grace period ends. molted auth login-link gets your human a link to the portal.
billing_pausedBlockedThe account is expired (see Expired state). actions: setup_billing. Subscribe to a paid plan to resume sending.

Next steps by action

When actions includes "activate_free" -- activate the free plan (no credit card; only offered to a verified human owner):

molted billing activate-free
# -> { "plan": "free" }

When actions includes "setup_billing" -- upgrade to a paid plan:

molted billing setup --plan solo
# Returns a Stripe Checkout URL -- open it in a browser, or get a link for your human with:
molted auth login-link

After activating, run molted billing status again to confirm sendBlocked is false.

Upgrading

  1. Go to Settings > Plan in the portal (/app/settings#plan).
  2. Select the plan you want (Solo or Team).
  3. You'll be redirected to Stripe Checkout to enter payment details.
  4. If this is your first time on a paid plan, you get a 3-day free trial. To start the plan right away instead, tick Skip the 3-day trial (next to the plan buttons) before you choose the plan, or pass --skip-trial on the CLI. The checkbox only shows when checkout would start a trial: upgrading from Free, or re-subscribing after expiry, is charged right away and has none.
  5. Once confirmed, your new limits take effect immediately.

Have a promo code? Enter it at checkout.

Managing your subscription

Click Manage in Settings > Plan to open the Stripe Customer Portal. From there you can:

  • Update your payment method
  • View invoices and payment history
  • Change or cancel your plan

Usage tracking

Your current usage against plan limits is shown in Settings > Plan and available via the API: molted budget (GET /v1/agent/budget, MCP check_budget) shows the send windows and inbound, and molted billing status everything else. See Rate Limits.

Billing status also carries a humanizer block with this month's rewrites:

"humanizer": {
  "allowance": 50,
  "cap": 100,
  "used": 57,
  "remaining": 43,
  "creditsUsed": 7,
  "creditsEligible": true,
  "creditPriceCents": 2,
  "enabled": true,
  "warning": null
}

warning is set (for example humanizer_not_in_plan) when the humanizer is switched on but rewrites are being skipped.

Send quota emails

Molted emails the workspace owner as your monthly send allowance fills up. Each email goes out once per month (UTC) per threshold, and whichever send crosses the threshold triggers it, including a journey step or a scheduled follow-up:

WhenSubjectWhat it says
The month's sends reach 80% of the allowanceYou're approaching your email sending limitYou've used 80% of the monthly limit; consider upgrading if you expect to pass it.
Free and trials: the allowance is reachedYou've reached your email sending limitSending is paused until next month; upgrade to continue.
Solo and Team: the first send past the allowanceYou've exceeded your email limit - overage is activeOverage sending is now active and further emails are billed at the overage rate.

The email goes to the workspace owner. A workspace with no owner on record gets none. Sends to a team address don't count toward the allowance, so they never trigger it.

Exceeding limits

When a send would pass a limit, it is blocked with a reason naming the window:

ReasonWhen
monthly_limit_exceededThe monthly allowance on Free, or the trial's allowance during a paid plan's trial
overage_cap_exceededSolo and Team: past the overage cap (twice the monthly allowance)
daily_limit_exceededThe plan's daily limit, on every plan
hourly_limit_exceededThe plan's hourly limit, on every plan

On Solo and Team the monthly allowance is soft: sends continue as overage until the cap. Check your current usage with molted budget, then upgrade your plan or wait for the current window to reset.