Reference

Limits

Sizes, counts, and rates the API enforces.

Messages

LimitValue
Recipients per message50 across to, cc, and bcc
Body size512 KiB, text and html combined
Attachments per message10
Attachment size2 MiB combined, after base64 decoding
Subject length998 characters, no line breaks
Labels per sent message50
Label length1 to 64 characters
Idempotency key length1 to 200 characters
Search query length1 to 1000 characters

Sending rate

Each inbox may send 250 messages in any rolling 24-hour window by default. The 251st returns rate_limited (429) with transient: true. The send is not lost; retry later with the same idempotencyKey. Operators can set a different limit per inbox, between 1 and 10,000.

Plans

On the hosted service, each account has a plan with a monthly send allowance, a triage allowance, and an inbox count. When an allowance is spent the operation returns billing_limit (402). The send is not lost: after upgrading or adding capacity in the dashboard, retry with the same idempotencyKey. Read remaining balances with getUsage. Plan limits and prices are listed in the repository's docs/pricing.md. Self-hosted deployments without billing configured skip these checks.

Inboxes and accounts

LimitValue
Inboxes per accountSet by the plan on the hosted service; otherwise no default cap, and an operator can set a quota
Username1 to 64 characters: letters, digits, ., _, -, starting with a letter or digit
Display name200 characters
Group name1 to 64 characters: lowercase letters, digits, _, -, starting with a letter or digit
Active API keys per account20
API key lifetime1 to 365 days, default 30

Reading

LimitValue
Page size, inboxes50 default, 100 maximum
Page size, messages, search, threads20 default, 100 maximum
Messages per thread on getThread500; read larger threads through listMessages
Attachment download URL lifetime5 minutes
Text in email.received webhook payloads64 KiB, then bodyTruncated: true
Text sent to triage32,768 characters, then bodyTruncated: true

Sign-in

Three magic-link or code requests per ten minutes per email address, and ten verification attempts per minute. Links and codes expire after ten minutes.

Requests

There is no general request-rate limit on the API beyond the send limit. Be a good neighbor: poll every 30 to 60 seconds rather than continuously, and use listThreads with label filters rather than reading every message.