Plans and limits
The numbers, in one table
| Plan | Monthly price | Daily texts | Daily emails | Dialer calls per day |
|---|---|---|---|---|
| Free | $0 | 25 | 25 | 20 |
| Green Pea | $150 | 100 | 100 | 50 |
| Pro | $200 | Unlimited | Unlimited | Unlimited |
| Pro Beast | $500 | Unlimited | Unlimited | Unlimited |
| Concierge | $1,000 | Unlimited | Unlimited | Unlimited |
Solo ($100) is a grandfathered plan, no longer sold. Grandfathered Solo accounts get the same daily text and email caps as Green Pea (100 and 100) with no auto dialer access, matching what was true on Solo before it was retired.
A trap worth explaining, because the code itself flags it
JOEY's plan system stores two different things that can look identical from the outside: a plan slug (free, starter, most_value, pro, concierge) and an account type (free, trial, and others). Looked up by plan slug alone, the Free row is null, meaning uncapped. That is deliberate, not a bug: a live trial tenant is stored with plan='free' too, and a 0 or a real cap in that row would silently throttle every trial account in the fleet, an outage dressed as a safety feature.
The real Free-tier meter, 25 texts, 25 emails, 20 dialer calls a day, is resolved separately, by checking account_type === 'free' rather than the plan slug. This is why the table above states the Free row as 25 / 25 / 20 rather than "uncapped": citing the plan-slug row for a genuine Free account would publish a materially wrong number.
What "unlimited" means, and what it does not
null in the underlying limits table means no per-day usage cap. It does not mean unguarded. Every send on every plan, uncapped included, still passes through quiet hours, fail-closed suppression (never message a customer a coworker's note says is already handled), single-active sending (never zero, which is an outage, never duplicate, which is a double-send), and per-send rate limiting. Those are safety guards, not plan entitlements, and they are identical on every plan.
A cap that is published but not yet enforced
Green Pea's 50-calls-a-day dialer cap is a real number in the plan limits file, but the auto dialer's backend is still single-tenant: it reads one manual daily call cap from its own control file and defaults to unlimited. No per-tenant enforcement exists yet for this specific number. It is documented here as it is coded today rather than left silently implicit.
JOEY Virtual Machine (VPS) add-on
$39 per month. Included free on plans $500 per month and up. Limited-time promotion: every plan has VPS access at no extra charge until September. See Setup: run mode (VPS) for how to enable it.
Pay-as-you-go and API rates
Standard rates (shared inference): text $0.45, email $0.18, call $0.90, API request $0.04.
Pro Beast rates (dedicated inference, 2.5x the standard rate): text $1.13, email $0.45, call $2.25, API request $0.10.
See API and integrations for what "API request" actually means today.