Billing and quota

Quota behavior matches the running code: a hard monthly message cap, warning headers, and no overage invoices.

What counts

A billable message is an accepted ingest that inserts a messages row (POST /api/v1/messages). Test and live environments have separate counters.

  • Automatic retries are not extra messages.
  • Replay creates new deliveries; it does not create a new message or increment the meter.
  • Endpoint count is a separate cap at create time (3 / 25 / 100 by plan).

At the cap

Free 5,000 / Pro 100,000 / Growth 1,000,000 messages per UTC month. When the counter is at or above the limit, ingest returns HTTP 429 with code: plan_limit_messages. Already-accepted deliveries continue. There is no metered overage.

70 / 90 / 100%

Ingest responses include X-Outemit-Quota-Used and, once you cross a threshold, X-Outemit-Quota-Warning with value 70, 90, or 100. Dashboard Settings → Billing shows used versus limit for the current Test/Live toggle.

Spend limits

Configurable spend caps and paid overage are not implemented. Cancel and refund webhooks map the workspace back to Free limits. Operator notes live in the repo at docs/ops/QUOTA.md. See also pricing.