🏠 Home 📚 All Docs 📖 API Reference ⚙️ Platform Limits
⚙️
Platform Limits & Restrictions
Billing plan rate limits, per-provider quotas and restrictions, attachment constraints, reputation rules, queue priority, Redis caching strategy, and data retention policies.
8 Sections7 ProvidersLast updated: July 2026
1
💳

Billing Plans & Tenant Rate Limits

Every tenant is independently rate-limited based on their billing plan. Limits apply per-tenant across all applications sharing that tenant.

PlanPer MinutePer HourPer DayPer MonthPriceBest For
Free / Trial101005005,000FreeTesting, POC
Starter305005,00010,000$25/moSmall apps, low volume
Growth1002,00020,00050,000$75/moGrowing startups
Business50010,000100,000300,000$125/moMid-size companies
Scale2,00025,000250,000500,000$350/moHigh-volume senders
Enterprise5,000+100,000+1,000,000+Unlimited$500+/moCustom SLA, dedicated IP
💡

All limits are per-tenant — each tenant is independently rate-limited. Enterprise plans include dedicated IP pools, custom warmup schedules, and guaranteed SLA response times.

2
🌐

Email Provider Limits & Restrictions

Each provider has its own tier structure, rate limits, and restrictions. The platform automatically routes and falls back across providers based on your configuration.

SendGrid
TierDaily LimitMonthly LimitPriceNotes
Free100/day100/moFreeSingle sender verification only
Essentials100K/day100K/mo$19.95/moDomain authentication, basic analytics
Pro1.5M/dayVaries$89.95/moDedicated IP, subuser management
PremierUnlimitedCustomCustomSLA, dedicated CSM

Key Restrictions:

  • Free tier: single sender identity required, no dedicated IP
  • Must verify sender identity (single sender or domain authentication)
  • Spam rate must stay below 0.08% — accounts may be suspended above this
  • Bounce rate must stay below 5%
  • Cold outreach and purchased lists are strictly prohibited
  • API rate limit: 10,000 requests/second (Pro+)
Brevo (Sendinblue)
TierDaily LimitMonthly LimitPriceNotes
Free300/day300/moFreeBrevo branding in emails
StarterNo daily limit20,000/mo$25/moRemove branding
BusinessNo daily limit20,000+/mo$65/moMarketing automation, A/B testing
EnterpriseUnlimitedCustomCustomDedicated IP, priority support

Key Restrictions:

  • Free tier: 300 emails/day hard cap with mandatory Brevo branding
  • Sender domain must be authenticated (DKIM + DMARC recommended)
  • Dedicated IP available from Business tier only
  • API rate limit: 80 requests/second (transactional endpoint)
Mailgun
TierDaily LimitMonthly LimitPriceNotes
Flex (Trial)100 totalFree3-month trial, limited features
Foundation50,000/mo$35/moCustom domains, basic analytics
Scale100,000/mo$90/moDedicated IP, advanced analytics
EnterpriseUnlimitedCustomCustomSLA, deliverability consulting

Key Restrictions:

  • Trial: limited to 100 emails total, verified recipients only
  • Domain must be verified with DNS records (SPF + DKIM)
  • Burst rate: 300 messages/minute (Foundation), higher on Scale+
  • Bounce suppression is automatic — repeated bounces are permanently blocked
  • EU region available at api.eu.mailgun.net
Mailchimp Transactional (Mandrill)
TierDaily LimitMonthly LimitPriceNotes
Block of 25K25,000$20/moPer-block pricing
Block of 50K50,000$40/moVolume discount
Block of 100K+CustomCustomDedicated IP included

Key Restrictions:

  • Requires a Mailchimp account at Standard plan or higher — no standalone signup
  • Sending domain must be verified (SPF + DKIM)
  • Automatic spam/bounce monitoring — high complaint rates trigger suspension
  • API rate limit: 50 requests/second
AWS SES
TierDaily LimitMonthly LimitPriceNotes
Sandbox200/dayFreeFreeVerified recipients only
Production50,000/day (soft)Unlimited$0.10/1,000Request production access
High VolumeUnlimited (request)Unlimited$0.10/1,000Dedicated IPs at $24.95/mo each

Key Restrictions:

  • Sandbox mode: can only send to verified email addresses — must request production access
  • Production access takes 24–48 hours to approve via AWS support case
  • Bounce rate must stay below 5%
  • Complaint rate must stay below 0.1%
  • Default sending rate: 14 emails/second — increasable via AWS support
  • Region-specific — deploy in the AWS region closest to your user base
SMTP (Self-hosted / Third-party)
TierDaily LimitMonthly LimitPriceNotes
Gmail SMTP500/dayFreeApp password required — testing only
Zoho Mail1,500/dayFree tierProduction use with domain verification
Microsoft 36510,000/day$6/user/moEnterprise SMTP relay
Self-hosted (Postfix)UnlimitedServer costFull control, manage IP reputation yourself

Key Restrictions:

  • Gmail: 500/day limit — not suitable for production bulk sending
  • Zoho: requires domain verification; rate limit varies by plan
  • Port 587 (STARTTLS) or 465 (SSL) — platform auto-detects the correct port
  • IP reputation is your responsibility on self-hosted setups
  • No built-in analytics from provider — rely on Kodefast platform tracking
OAuth Gmail API
TierDaily LimitMonthly LimitPriceNotes
Free (personal)500/dayFreeOAuth consent screen required
Google Workspace2,000/day$6/user/moHigher limits, admin controls
Workspace Enterprise10,000+/dayCustomPer-user sending limits

Key Restrictions:

  • Requires OAuth 2.0 setup: Client ID + Secret + Refresh Token
  • Personal accounts: 500 recipients/day hard limit
  • Workspace: 2,000 recipients/day per user account
  • Rate limit: 250 quota units/second across all Gmail API calls
  • Best for low-volume transactional mail from a personal or company Gmail account
3
📎

Email Attachment Limits

All email send requests support optional file attachments. These limits apply consistently across every supported provider.

ConstraintLimitReason
Max attachments per email10 filesValidation enforced at the API layer
Total attachment size (all files)10 MB decodedAWS SES hard limit — applies to all providers for consistency
Single file sizeCounted towards 10 MB totalNo per-file limit beyond the total
Encoding requiredBase64 string in content fieldDecoded before forwarding to provider
⚠️

The 10 MB limit covers the decoded file size. Base64 encoding adds approximately 33% overhead in transit, but validation is enforced on the decoded bytes.

json
{
  "attachments": [
    {
      "filename": "report.pdf",
      "contentType": "application/pdf",
      "content": ""
    }
  ]
}
ProviderSupports AttachmentsImplementation
SendGrid✅ YesNative attachments API field
SMTP✅ YesNodemailer multipart/mixed
Brevo✅ YesNative attachment API field
Mailgun✅ YesFormData multipart (auto-switched)
Mailchimp (Mandrill)✅ YesNative attachments API field
AWS SES✅ YesRaw MIME via SendRawEmail action
🔄

Disaster Recovery: Attachment data is stored as JSON in the attachments_json database column. If the server crashes after the DB write but before the queue enqueue, the message sweeper fully reconstructs and re-enqueues the email — including all attachments — within 2 minutes. No S3 or external storage required.

4
🛡️

Platform Restrictions

📊 Reputation-Based Sending Restrictions

Every tenant has a continuous reputation score (0–100) computed from delivery event data. Sending restrictions automatically apply based on the score.

Score RangeStatusSending Behaviour
85–100HEALTHYFull sending — no restrictions
70–84WARNINGAdmin alerted; enhanced monitoring; no send restriction
50–69RESTRICTEDDaily limit reduced to 20% of configured limit
0–49SUSPENDEDAll sending blocked — requires platform admin review

Reputation Score Factors:

FactorWeightThreshold
Bounce rate35%0 penalty at <2%; full deduction at >10%
Complaint / spam rate30%0 penalty at <0.05%; full deduction at >0.3%
Blacklist status15%Full deduction if on any major blacklist (Spamhaus, etc.)
DKIM failure rate10%Full deduction if failure rate >5%
Volume spike5%Full deduction if 24h volume > 3× 7-day average
Domain age5%Full deduction for domains less than 30 days old
🚫 Hard Restrictions
RulePolicy
Cold outreachNot permitted on shared infrastructure — violations trigger suspension
Sending from kodefast.comProhibited — tenants must use their own verified domain
Global suppressionAddresses on the platform blocklist are silently dropped — never retried
Tenant suppressionBounced/unsubscribed recipients are automatically blocked for that tenant
Domain warmupNew domains start at 100/day and ramp to full limit over 14 days automatically
API key scopeKeys are restricted to specific categories (OTP, TRANSACTIONAL, MARKETING) — cross-scope sends are rejected
Webhook signaturesEd25519 verification is mandatory — unsigned or invalid events are rejected with 403
🔀 Provider Fallback Rules
Service TypePrimary ProviderFallbackNotes
OTPSendGridAWS SES — immediate, no retry delayZero-delay fallback to protect OTP delivery SLA
TransactionalSendGridAWS SES — after 2 failed retriesAutomatic after consecutive provider failures
MarketingSendGridNo fallback — retry on same providerNever falls back to SES to protect OTP/Transactional reputation
⚠️

Marketing emails do not fail over to SES or any secondary provider. This is intentional — using the fallback provider for bulk marketing would contaminate its reputation and slow down OTP delivery for all tenants.

5
🔑

Per-Application API Key Restrictions

Each application gets its own API key with a scoped set of allowed email categories. This prevents, for example, an AI chatbot from accidentally triggering marketing sends.

Application TypeDefault Allowed CategoriesRationale
AI / Chatbot AppOTP, TRANSACTIONALAI must not trigger marketing sends
Document Signing AppTRANSACTIONALSigning confirmations and audit receipts only
Student / Portal AppOTP, TRANSACTIONALOTPs and enrollment notifications
Healthcare AppOTP, TRANSACTIONALAppointment reminders and compliance emails
Booking / Hospitality AppTRANSACTIONALBooking confirmations and guest notifications
Marketing ModuleMARKETINGOnly application permitted to send marketing emails

Each API key also has:

  • Independent daily limit — counted against the tenant total but configurable per key
  • Category scope — sends outside allowed categories are rejected with API_KEY_INVALID
  • Revocation — a key can be revoked without affecting other keys or applications
  • Full audit trail — every email send is logged with the API key that triggered it
6

Queue Priority

Emails are routed to one of five queues based on service type and urgency. Workers process higher-priority queues first.

QueueUse CasesPriorityWorker Pool
otpLogin OTP, password reset, 2FA1 — HighestDedicated — never shared with other queues
txn.highInvoice, payment confirmation, booking2Shared high-priority pool
txn.normalWorkflow notifications, approvals, alerts3Shared pool
marketing.bulkNewsletter, promotional campaigns5Shared pool
marketing.lowRe-engagement, low-priority lists10 — LowestShared pool

OTP emails run on a dedicated worker pool. Marketing traffic — even at high volume — cannot delay OTP delivery. This is guaranteed at the infrastructure level, not just by configuration.

7
⚙️

Performance & Caching

The control plane uses Redis to cache slow-changing tenant data. Under load, this reduces database queries from 9 → 3 per email send — approximately 70% fewer DB hits.

Redis Cache TTL Table
Cached DataTTLWhy Cached
Tenant config (status, limits, defaults)5 minOnly changes on admin update
Reputation score2 minRefreshed periodically from bounce events
Active sending domain5 minRarely changes once verified
Routing rules5 minChanged by admin only
Provider credentials10 minVery rarely changed
IP allowlist5 minRarely changed
Platform provider config10 minAlmost never changed

Never cached (always live DB):

  • Global suppression checks — must be real-time to block bad recipients immediately
  • Tenant suppression checks — must be real-time
  • Rate window counters (per-minute, per-hour, per-day) — must be real-time
  • Warmup daily count — must be real-time
📊

At 500 requests/second, the Redis caching layer prevents approximately 3,000 unnecessary DB queries per second. This is the primary mechanism enabling high throughput on a single database connection pool.

Cache Invalidation

Caches are automatically invalidated whenever the underlying data changes:

TriggerCache Cleared
Tenant config updatedTenant config cache
Routing rule created / modified / deletedRouting rules cache
Provider credentials updatedProvider credentials cache
Domain settings updatedActive sending domain cache
IP allowlist changedIP allowlist cache
8
🗄️

Data Retention & Compliance

SettingDefaultConfigurableMinimum
Email data retention45 daysYes (per tenant)7 days
Audit log retention45 daysYes (per tenant)7 days
Auto-purgeEnabledYes
Manual purgeAvailableAdmin / Tenant Admin
GDPR data exportSupportedOn request
GDPR right to erasureSupportedOn request
HIPAA compliance modeOff by defaultPer tenant
🔒

Recipient email addresses are stored as encrypted + hashed values — PII is never stored in plaintext. All data handling is designed to be HIPAA and GDPR compliant by default.

⚠️

Manual purge via the API or Dashboard is irreversible. Data older than the retention window is permanently deleted from the database with no backup path. Configure auto-purge carefully and test with a non-production tenant first.

On this page