FlaresendDocs

Limits

Every size, count and rate limit in Flaresend, in one place, with where it is enforced.

These are Flaresend's own limits. Cloudflare Email Service has its own limits on top, which depend on your Cloudflare plan; see Cloudflare's Email Service docs.

Per email

LimitValueError
Recipients (to + cc + bcc, after removing duplicates)50400 too_many_recipients
One address field (from, replyTo, each recipient), including the display name3–400 characters400 invalid_body
Address part254 characters, local part up to 64400 invalid_body
subject998 characters400 invalid_body
Whole email (HTML + text + attachments, as JSON)5 MiB400 payload_too_large
Attachments20400 invalid_body
Attachment filename255 characters400 invalid_body
Attachment type, contentId127 characters400 invalid_body
Custom header name100 characters400 invalid_body
Custom header value2,048 bytes400 invalid_header
Custom headers not starting with X-20400 invalid_header
All custom headers together16 KB400 invalid_header
Tag key / value64 / 256 characters400 invalid_body
idempotencyKey256 characters400 invalid_body
scheduledAtIn the future, at most 30 days ahead400 invalid_schedule

Per request

LimitValueError
Emails in one batch100400 invalid_body
limit on paginated lists (emails, events, contacts, audience members, webhook deliveries)1–100, default 25400 invalid_query for emails and events; other lists clamp the value
limit on the suppression list (admin)1–200, default 50clamped
Contacts in one import5,000400 invalid_body
Contact IDs in one add/remove audience call5,000400 invalid_body

Per project

LimitValueError
Send rate300 emails per 60 seconds429 rate_limited, with Retry-After: 60
Daily sendsdailyLimit, default 5,000 per UTC day. 0 means no limit429 daily_limit_exceeded, resets at 00:00 UTC

Both count only live sends: emails from an fs_live_ key, RPC, batch items, broadcasts and resends. Test-key sends and reads don't count. Each item in a batch counts as one send.

The rate limit is a Cloudflare rate limiting binding in apps/mailer/wrangler.jsonc ("limit": 300, "period": 60). Change it there if you need more. The SDK retries rate_limited after the Retry-After wait; it never retries daily_limit_exceeded.

Broadcasts

LimitValue
Subscribed contacts per broadcastBROADCAST_MAX_RECIPIENTS, default 500 (400 too_many_recipients on send)
Sending speed100 emails per broadcast every 5 minutes
Broadcasts sending at the same time10 are advanced on each 5-minute run; others wait their turn

Webhooks

LimitValue
Time your endpoint has to answer10 seconds
Retries after the first attempt8, from 30 seconds to 12 hours apart
Response body stored per attempt1,024 characters

Sending and storage

LimitValue
Send retries on Cloudflare errors that can be retried8, backing off min(2^n × 15 s, 1 h) plus up to 20% jitter
How long email bodies are kept (R2 lifecycle rule)30 days. After that, content and resend return 404 content_expired. Metadata in D1 stays.
Longest a scheduled email waits on the queue12 hours. Emails scheduled further ahead are put on the queue by the cron job when they get within 12 hours.

Names and IDs

FieldLimit
Project slug1–63 characters: lowercase letters, digits, -; starts with a letter or digit
Project, API key, audience name1–200 characters
Template name1–100 characters: lowercase letters, digits, - and _; starts with a letter or digit
Contact first/last name200 characters

SDK

SettingDefault
maxRetries2 (3 attempts in total)
Wait between retries0.5 s, 1 s, 2 s… up to 8 s, with jitter
Longest Retry-After the client waits60 seconds. Longer values throw straight away.

On this page