MessagePipedocs
Concepts

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:

BucketUsed whenWhat the price covers
email, sms, push, chatYou send with your own provider keys (bring your own keys)The MessagePipe platform fee. Your provider bills you separately for delivery.
email_managedYou send email through managed email, delivered by MessagePipe on its own Amazon SES accountDelivery as well. There is no separate provider bill.
sms_managedManaged SMS, when it is offeredDelivery 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

BucketRefreshSpent first
Monthly allowanceResets to the plan's quota on the 1st of each month.Yes
Top-up balanceNon-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.”