Billing & Usage

Plans, credits, quotas, the free tier queue, and how billing works in OneShotMail.

Plans

PlanMonthly priceReceive/moSend/moMax email sizeMax TTLRate limitSeats
Free$02551 MB1 hour5 rps1
Solo$1010,0001,00010 MB12 hours50 rps1
Team$79100,00010,00025 MB24 hours200 rps10
Max$6291,000,000100,00050 MB24 hours1,000 rps1,000
EnterpriseCustomCustomCustomCustomCustomCustomCustom

All paid plans are billed monthly via Stripe. You can upgrade, downgrade, or cancel at any time from the Stripe customer portal.

How billing works

When you create an address (receive or send), the billing system checks in this order:

  1. Monthly allocation — If you have remaining addresses in your monthly allocation for this mode, it is decremented and the request proceeds.
  2. Credit balance — If your monthly allocation is exhausted, credits are consumed instead. Receive costs 1 credit; send costs 2 credits.
  3. Quota exceeded — If both your allocation and credits are zero, the API returns 402 Payment Required with an error like:
{
  "error": {
    "code": "QUOTA_EXCEEDED",
    "message": "Monthly address limit reached. Top up credits or upgrade your plan.",
    "upgrade_url": "https://oneshotemail.com/pricing"
  }
}

Monthly allocations reset at the start of each billing cycle (the anniversary of your subscription date). Unused monthly allocations do not carry over.

Credits

Credits are a pay-as-you-go mechanism for usage beyond your monthly allocation.

Credit packs

Available on every plan. Same price regardless of your plan. If you’re buying credits regularly, upgrading your plan will save you money — plan allocations are always cheaper per address than credits.

PackPricePer-credit cost
50 credits$3$0.060
200 credits$10$0.050
1,000 credits$40$0.040

Purchasing credits

Via the API:

checkout = oneshot.buy_credits(500)
# Open checkout.checkout_url in a browser to complete the purchase

Via the CLI:

oneshot credits buy --amount 500

Via the Web UI: Navigate to Account Settings and click “Buy Credits”.

All purchases go through Stripe Checkout. After successful payment, credits are added to your account immediately via Stripe webhook.

Credit costs by operation

OperationCredit cost
Create address (receive)1 credit
Create address (send)2 credits

Credit expiry

Credits expire 12 months after purchase. Check your credit balance via:

acct = oneshot.account()
print(f"Credits remaining: {acct.credits_remaining}")

Free tier

The free tier provides 25 receive addresses and 5 send addresses per month at no cost.

The queue

New free tier accounts are placed in a queue to manage costs and prevent abuse. Here is how it works:

  1. You register with your email address at POST /account/register.
  2. You receive a queue position (e.g., “You’re #47”).
  3. Accounts are approved automatically at a rate-limited pace (starting at 10 per day).
  4. When approved, you receive an email with your API key.

Auto-approval

Some accounts skip the queue entirely:

  • .edu email addresses (educational institutions).
  • Known company domains (configurable allowlist).
  • Referrals from existing paid users.

Free tier limits

LimitValue
Receive addresses/month25
Send addresses/month5
Max email size1 MB
Max TTL1 hour
Rate limit5 rps
Max attachments2
Max attachment size500 KB
Credit purchasesAvailable

Anti-abuse measures

  • One free account per email domain (not per email address).
  • Accounts with zero usage for 90 days are auto-suspended.
  • Aggressive rate limiting (5 rps).

Enterprise plans

For organisations with large-scale email testing needs:

  • Custom allocations — set receive and send limits to match your usage.
  • Custom TTL — up to configurable maximums.
  • 50 MB email size — for testing large attachment workflows.
  • Custom rate limits — higher throughput for load testing.
  • Volume pricing — lower per-address costs at scale.
  • Invoicing — pay by invoice instead of credit card (via Stripe).
  • SLA — 99.9% uptime backed by our serverless AWS architecture.
  • Audit logging — export usage events for compliance.

Contact enterprise@oneshotemail.com for pricing.

Checking your usage

API

acct = oneshot.account()
print(f"Receive: {acct.usage.receive.used} / {acct.usage.receive.limit}")
print(f"Send: {acct.usage.send.used} / {acct.usage.send.limit}")
print(f"Credits: {acct.credits_remaining}")
print(f"Cycle ends: {acct.billing_cycle_ends}")

CLI

oneshot whoami

Web UI

The dashboard shows live usage meters for receive and send, plus your credit balance.

FAQ

Is the free tier really free? Yes. No credit card required. You just need to wait for queue approval.

What happens when I hit my limit? The API returns 402 Payment Required. Buy credits or wait for the billing cycle to reset.

Do credits expire? Yes, 12 months after purchase.

Why is there a waitlist for the free tier? To control costs and filter out abuse. Paid plans have no queue — instant access.

Can I downgrade from a paid plan to free? Yes, but you will lose access to features beyond free tier limits immediately (larger emails, longer TTL, etc.).