MOLTED EMAIL
CLI Reference

molted billing

Billing and plan management

CommandDescription
molted billing statusGet current billing status
molted billing activate-freeActivate the free plan (no credit card required; verified human accounts only)
molted billing start-nowEnd a paid plan's 3-day trial now and start paying (charges the card on file)
molted billing setupGenerate a Stripe checkout link to activate or change your billing plan

Agent context

Billing controls your sending quota and must be activated before any email can be sent. New accounts start on the "trial" plan with sends blocked.

Check billing status

molted billing status
# → { "plan": "trial", "sendBlocked": true, "actions": ["setup_billing"] }
# → sendBlocked: true means all sends will return "trial_not_activated"

Activate billing (free tier -- no credit card, HUMAN ACCOUNTS ONLY)

molted billing activate-free
# → { "plan": "free" }
# → sends are unblocked immediately (3,000/month, 3 mailboxes; new free
#   accounts ramp up: 20/day in week 1, 50/day in week 2, then 100/day)

Free can only be activated from the "trial" plan (any other plan gets 400). Free requires the account owner to be a verified human. An account created by molted auth signup is agent-owned, so this returns 403

"free_plan_requires_human" -- use `billing setup` instead, or have a human

claim the account first. An unverified human owner gets 403

"email_verification_required" until they verify their email. A verified

human owner on a disposable email domain (mailinator.com and the like) gets 403 "disposable_email_not_allowed" -- use a real address, or buy a paid plan.

Activate billing (paid plan -- requires Stripe checkout, agents may buy this):

molted billing setup --plan solo
# → { "url": "https://checkout.stripe.com/...", "plan": "solo" }
# → open the URL to complete payment (hand to a human with `auth login-link`)
# → a checkout from the "trial" plan starts with a 3-day trial (trial limits:
#   100 sends, 3 mailboxes, 1 custom domain) unless billing status shows
#   "trialEligible": false; add --skip-trial to start paying right away.
#   Upgrading from Free gets no trial: the full plan applies at once.

End the trial early and get the full plan limits now (charges the card; a human decision: on the default human gate an agent gets human_decision_required, so hand the decisionUrl to a person):

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

Check remaining quota before batch sends

molted budget
# → { "tenantId": "tenant-abc123",
#     "monthly":  { "used": 120, "limit": 3000, "remaining": 2880 },
#     "daily":    { "used": 12,  "limit": 100,  "remaining": 88   },
#     "hourly":   { "used": 5,   "limit": 40,   "remaining": 35   },
#     "inbound":  { "used": 310, "limit": 1000, "remaining": 690, "held": 0 },
#     "negativeSignals": { "count": 0, "budget": 50, "remaining": 50 },
#     "timestamp": "2026-04-05T12:00:00.000Z" }
# See `molted budget --help` for the full field reference (freeRamp, inbound, etc).

Plans and quotas

  • Trial: the sign-up state, sends blocked until billing is set up. A paid plan's 3-day trial runs on trial limits: 100 sends in total, 3 mailboxes, 1 custom domain
  • Free: 3,000 monthly sends, daily 100 (20/day in week 1, 50/day in week 2), hourly 40, 3 mailboxes, no custom domains, no credit card
  • Solo ($19/mo): 10,000 monthly sends, daily 1,000, hourly 200, 10 mailboxes, 3 custom domains
  • Team ($79/mo): 50,000 monthly sends, daily 5,000, hourly 1,000, 50 mailboxes, 10 custom domains

Exceeding a limit → sends blocked with reason "hourly_limit_exceeded",

"daily_limit_exceeded", "monthly_limit_exceeded" or "overage_cap_exceeded"

Typical agent flow

molted billing status         # check if blocked
molted billing setup --plan solo  # or activate-free if the account is a verified human's
molted budget                 # check quota before a batch
molted send simulate-batch    # dry-run to see per-recipient policy
molted send batch             # send the batch

Related: molted send, molted budget, molted analytics

Commands

molted billing status

Get current billing status

molted billing status

molted billing activate-free

Activate the free plan (no credit card required; verified human accounts only)

molted billing activate-free

molted billing start-now

End a paid plan's 3-day trial now and start paying (charges the card on file)

molted billing start-now

A paid subscription bought from the "trial" plan normally starts with a 3-day trial on restricted limits (100 sends, 3 mailboxes, 1 custom domain). start-now ends the trial immediately: the card on the subscription is charged and the full plan limits apply at once.

It spends money, so it is a human decision. It needs an admin-scoped key, and on the workspace's default human gate ("enforce") an agent gets:

# → { "error": "human_decision_required", "decisionUrl": "https://..." }

Hand the decisionUrl (or molted auth login-link) to a person; they click "Start my plan now" in the portal (Settings, Plan).

molted billing status
# → { "inTrial": true, "canStartNow": true, ... }
molted billing start-now
# → { "started": true, "plan": "solo", "status": "active" }

Safe to repeat: on an already active subscription it returns { "started": false } and changes nothing. If the payment fails (HTTP 402, payment_failed or payment_action_required for 3D Secure) the trial continues; a retry after fixing the card is a fresh attempt.

molted billing setup

Generate a Stripe checkout link to activate or change your billing plan

molted billing setup [options]
OptionDescriptionDefault
--plan <plan>Billing plan: solo or team (default: solo)solo
--skip-trialSkip the 3-day trial and start the paid plan at checkout
--success-url <url>Redirect URL on success
--cancel-url <url>Redirect URL on cancel

Plans

--plan solo $19/mo -- 10,000 emails/mo, daily 1,000, 10 mailboxes, 3 custom domains [default] --plan team $79/mo -- 50,000 emails/mo, daily 5,000, 50 mailboxes, 10 custom domains

The free plan needs no checkout: molted billing activate-free (verified human accounts only -- an agent-owned account gets 403 and should use this command instead).
Enterprise plans are not self-serve -- contact sales.

A checkout from the "trial" plan starts with a 3-day trial on restricted limits (unless billing status shows "trialEligible": false). --skip-trial skips it: the card is charged at checkout. Upgrading from Free never gets a trial. Needs a key with manage on every mailbox; a workspace that already pays gets 400 (change plans in the billing portal instead).

Typical agent flow

molted billing status
# → { "sendBlocked": true, "actions": ["setup_billing"] }
molted billing setup --plan solo
# → { "url": "https://checkout.stripe.com/...", "plan": "solo" }
# → hand the URL to a human via `molted auth login-link`

After payment completes, sends are unblocked automatically.

See CLI overview for global options, credentials and output format.