Usage limits and safeguards
Included recipients, overage and your monthly ceiling, the daily limit, when an account pauses, and the status codes.
Included recipients and overage
The plan includes 10'000 recipients per calendar month (UTC), counted per recipient: one email to three people counts three. Past 10'000 your mail keeps going. Each started block of 1'000 recipients over the plan costs CHF 0.50 plus tax where it applies, on the next invoice; the founding offer does not discount it.
Monthly ceiling
You choose a ceiling in the dashboard: 10'000 or 25'000 recipients a month, 25'000 by default; a change takes effect at once. A ceiling of 10'000 means no extra cost ever. For more than 25'000 a month, write to us through Support in the dashboard: letr.dev can grant your account a higher ceiling. It becomes your ceiling at once and is listed as a third choice under Billing, where you can switch to a lower one. letr.dev emails the account owner when it grants, changes or removes such a ceiling. At the ceiling sending stops and the API answers 429 monthly_ceiling_reached. letr.dev emails the account owner at 80 % and 100 % of the included 10'000 and at 90 % of the ceiling.
GET /v1/usage shows sent, included, ceiling, ceilingChoices, overageRecipients, overageBlocks, overageAmount (minor units, before tax), currency, dailyLimit and sentToday for the current month.
Message history
The dashboard and GET /v1/emails show each email and its events for 30 days, and letr.dev deletes them after 32. The owner of the account can buy 365 days in the dashboard under Billing, for CHF 60 a year, paid upfront: letr.dev then shows them for 365 days and deletes them after 367. Sender, recipients, subject, tags and delivery events stay. The content of each email, attachments included, is kept for the same period and shown on the email's page and under GET /v1/emails/{id}/content.
You can withdraw within 14 days of buying it and get the full amount back; your plan keeps running and within a day letr.dev deletes messages older than 32 days. After that you can cancel at any time. There is no refund, and the 365 days stay until the paid year ends. Then the add-on expires: within a day you see 30 days again, and after 14 days letr.dev deletes messages older than 32 days. A renewal that cannot be charged is treated the same way and does not pause sending: pay the open invoice within those 14 days and everything stays.
If your plan ends, the add-on ends with it, without a refund, and the account's data is deleted 30 days later. Withdrawing from the plan within its 14 days also refunds the add-on. Erasing a recipient also removes the address from subjects and tags. If you buy the add-on, name the longer period in your own privacy notice where the law requires it. Metrics stay at 30 days. An Idempotency-Key is free again after 32 days, with or without the add-on.
Daily limit and steps
An account sends to at most as many recipients a day as its step allows. It starts on step 0 and moves up on its own:
| Step | Daily limit | Moves up after |
|---|---|---|
| 0 | 50 | letr.dev's review, 3 days and 200 delivered recipients |
| 1 | 500 | 14 days and 2'000 delivered recipients |
| 2 | 2'000 | the first paid renewal |
| 3 | none |
Every move up also needs bounces under 2 % and complaints under 0.1 % since the step began, and the days and delivered recipients count from the start of the current step. A daily job moves an account up at most one step per run; an account never moves down on its own. letr.dev can set an account to any step at any time. GET /v1/usage returns step, dailyLimit (null on step 3) and nextStep, which holds the next step and its dailyLimit, daysLeft, deliveredLeft, ratesClean, renewalNeeded and reviewNeeded, or null on step 3. Past the daily limit the answer is 429 daily_limit_reached.
Review and decline
Your account goes live when your payment is confirmed. A person at letr.dev then checks your account, your website and what you send, normally within 1 Swiss business day of payment. Until that review is done, the account stays on step 0. Until your first renewal is paid, letr.dev can decline an account: sending stops at once and the full first payment is refunded at once, with the reason.
Auto-pause
An account pauses at a 5 % bounce rate, or at a 0.3 % complaint rate with at least 2 complaints, over the last 7 days, counted once it has sent to 50 recipients in that window. When letr.dev resumes a paused account, the count starts over at the resume: only emails sent since then count until 7 days have passed. Every bounce and complaint also goes to your webhooks, and GET /v1/metrics shows the counts letr.dev evaluates under reputation, including how many more bounces or complaints would pause the account. The same call answers the delivery totals, the outcomes per domain and the health of each webhook endpoint for the last 7 or 30 days (range=7d or 30d, default 30d), and the outcomes per UTC day for the last 30 days whatever the range.
Before a pause, letr.dev warns the account owner by email: when the account is 80 % of the way to a pause threshold, or when its complaint rate reaches 0.1 % with at least one complaint, over the same 7 days and once it has sent to 50 recipients in that window. The email names the rate, the pause threshold and up to 20 addresses that bounced or complained, and comes at most once a week per kind: the warning that the account is close to a pause, and the warning about the complaint rate.
A send from a paused account answers 403 account_paused, letr.dev emails the account owner the reason and what to do, and your webhooks receive account.paused. A person at letr.dev resumes the account after your message through Support in the dashboard or to [email protected].
Payment
A failed card payment for the plan pauses the account as well (403 account_paused), with the same email.
Request rate
The public API and the MCP server accept up to 600 requests a minute per account; every API key and MCP sign-in of the account counts toward the same 600. Requests without a valid key count per IP address (per /64 for IPv6). Above that the API answers 429 rate_limited with Retry-After in seconds. More than 3'000 requests a minute without a valid key from one address block every request from it, with or without a key, until the minute starts over.
The MCP server also caps tool calls at 120 a minute per credential (MCP), and the SMTP relay has budgets of its own (SMTP).
Every answer of the API and the MCP server carries X-RateLimit-Limit (requests per minute), X-RateLimit-Remaining (requests left in this minute) and X-RateLimit-Reset (seconds until the minute starts over).
Status codes
| Situation | Status and code |
|---|---|
| Monthly ceiling reached | 429 monthly_ceiling_reached |
| Daily limit reached | 429 daily_limit_reached |
| Too many requests | 429 rate_limited |
| More than 10 new domains an hour | 429 rate_limited, with Retry-After |
| Account not active (payment pending or disabled) | 403 account_not_active |
| Account paused (bounces, complaints, payment, operator) | 403 account_paused |