Credits and billing
How sends are metered. Monthly allowance, top-ups, auto-recharge.
Sends are metered in credits, one credit per accepted send. Each channel has its own balance: running out of email credits doesn't stop SMS.
Two ways to send, two sets of credits
Credits are held per bucket, and which bucket a send uses depends on who delivers it:
| Bucket | Used when | What the price covers |
|---|---|---|
email, sms, push, chat | You send with your own provider keys (bring your own keys) | The MessagePipe platform fee. Your provider bills you separately for delivery. |
email_managed | You send email through managed email, delivered by MessagePipe on its own Amazon SES account | Delivery as well. There is no separate provider bill. |
sms_managed | Managed SMS, when it is offered | Delivery as well. Not for sale yet. |
The managed layer never applies to sends made with your own keys, and your own-key credits are never spent on managed sends. Which bucket a send uses follows your workspace's first-priority provider for that channel. Each free workspace gets 500 managed emails a month.
Prices are per message and can change; read the current rate and the smallest top-up from the
for_sale, rate_cents, price_per_1k_usd and min_topup fields of GET /api/billing/credits.
The minimum top-up rises as the price falls so that the charge stays above the card processor's
minimum.
If a send fails over from a managed provider to one of your own (or the reverse), it is still billed from the bucket of the provider that was tried first.
Two buckets within each
| Bucket | Refresh | Spent first |
|---|---|---|
| Monthly allowance | Resets to the plan's quota on the 1st of each month. | Yes |
| Top-up balance | Non-expiring. Bought one-off or via auto-recharge. | After the monthly bucket. |
The Send API decrements the monthly bucket first; only once that hits zero does it start drawing on top-ups.
When credits run out
A send that would push the balance negative is rejected with 402 credits_exhausted. For managed email the message reads “No managed email credits remaining on this workspace.” Nothing is dispatched, no half-charge is recorded.
Buying top-ups
curl https://app.dev.messagepipe.dev/api/billing/credits/topup \
-H "Cookie: mp_session=..." \
-H "Content-Type: application/json" \
-d '{ "workspace_id": "wks_…", "channel": "email", "amount": 10000 }'In production this returns a Stripe client_secret you confirm client-side.
On success a payment_intent.succeeded webhook credits the balance and
writes one row to the immutable credit ledger.
Auto-recharge
Optional per-channel rule: “When the email balance drops below
threshold, automatically purchase amount credits.”