Limits and pricing
Scribase Mail plans (Free, Pro $20, Scale $90), per-request limits, rate limits, retry schedules and what counts toward your quota.
Prices are per month, in USD, no card needed for Free. The numbers below mirror the live GET https://mail-api.scribase.com/billing/plans endpoint; upgrades are a hosted checkout from the dashboard.
Plans
| Plan | Price | Included | Over the limit |
|---|---|---|---|
| Free | $0 | 3,000 emails/month, 100/day, 50/hour; 1 sending domain; 1 webhook endpoint; 10 MB per message | sending pauses until the next day/month |
| Pro | $20 | 50,000 emails/month, no daily cap, 2,000/hour; 10 domains; 5 webhook endpoints; 40 MB per message; test mode; team members | $0.80 per 1,000 |
| Scale | $90 | 150,000 emails/month, no daily cap, 10,000/hour; 1,000 domains; 20 webhook endpoints; 40 MB per message | $0.60 per 1,000 |
How that compares: Resend Pro is $20 for 50,000 and $0.90 per extra 1,000; Resend Scale is $90 for 100,000.
Gates on the Free plan
Shared sending reputation is the thing we protect hardest, so Free has rules:
- Sending starts only after DKIM and DMARC are verified on your own domain. No shared from-domain.
- New accounts are capped at 100 emails/day for the first 7 days; the cap lifts automatically when bounce rate is under 5% and complaint rate under 0.1%.
- Sign-ups from a company domain are approved immediately. Sign-ups from free mailboxes (gmail, outlook, yahoo, proton and similar) go to a short review queue.
- Over 5% bounces or 0.1% complaints across your last 1,000 emails pauses the account and emails you. Fix the list, reply, we unpause.
Request limits
| Limit | Value |
|---|---|
| API rate limit | 10 requests per second per API key; over it you get 429 rate_limit_exceeded |
Recipients in to | 50 |
Emails per POST /emails/batch | 100; attachments not allowed in batch |
| Attachments | 40 MB total per email (after base64) |
scheduled_at | up to 30 days ahead |
Idempotency-Key | 1-256 characters; remembered 24 hours; same key with a different body returns 409 invalid_idempotent_request |
| Custom headers | any header except the ones we set (From, To, Cc, Bcc, Subject, Date, Message-ID, MIME-Version, Content-Type, Content-Transfer-Encoding, DKIM-Signature, Return-Path, List-Unsubscribe, List-Unsubscribe-Post) |
| Tags | ASCII letters, digits, _, -; max 256 characters each |
| API key name | 50 characters |
| Webhook endpoint | public http(s) host |
Retries
| What | Schedule |
|---|---|
| Sending a message after a temporary failure | 1 min, 2 min, 4 min, 8 min, ... capped at 4 hours, 8 attempts, then failed |
| Webhook delivery after a non-2xx or timeout | 5 s, 30 s, 2 min, 10 min, 30 min, 2 h, 8 h, 8 h, 8 attempts, then failed |
| Webhook request timeout | 10 seconds |
Auth limits
| Limit | Value |
|---|---|
| Magic link, verification and reset links | 15 minutes, single use |
| One-time codes | 6 digits, 10 minutes, 5 attempts; the 6th wrong attempt invalidates the code |
| Session JWT | 1 hour (15 minutes for password reset) |
| Requests per email address per project | 5 per hour, then 429 with Retry-After |
| Requests per IP | 30 per hour |
What counts toward the monthly quota
Every accepted POST /emails body and every item in a batch counts as one email, whatever the number of recipients. Suppressed recipients that we refuse to send to do not count. Emails sent through the auth endpoints count against the separate auth allowance (10,000/month on Free, unlimited on paid plans). Webhook deliveries, domain verifications and API reads never count.