CarlyEmail docs

Plans and limits

What each tier allows, and where limits are enforced.

Every tier gets the whole API. The tiers differ in volume, not in features.

Free Startup Business Enterprise
Price $0 $20/mo $200/mo Contact us
Inboxes 3 25 250 Unlimited
Emails / month 1,000 10,000 100,000 Unlimited
Emails / day 100
Custom domains 1 10 100 Unlimited
Pods 2 5 25 Unlimited
Webhooks 2 10 50 Unlimited
Storage 1 GB 25 GB 250 GB Unlimited

A dash means no limit. Pricing and how to upgrade are on carlyemail.com/pricing.

Two counts are worth reading twice. The default pod counts, so the free tier's allowance of two leaves room for exactly one more. Deleted inboxes do not count — an address stays claimed after deletion so mail still in flight cannot land in a new inbox, but it stops using a slot.

Reading your own limits

GET /v0/organizations returns every count beside every limit, so an agent can check before it is refused rather than after. null means unlimited.

{
  "organization_id": "org_...",
  "plan": "free",
  "inbox_count": 2,  "inbox_limit": 3,
  "domain_count": 1,  "domain_limit": 1,
  "pod_count": 1,     "pod_limit": 2,
  "webhook_count": 0, "webhook_limit": 2,
  "storage_bytes": 41231, "storage_limit_bytes": 1073741824
}

GET /v0/billing answers the same question about the plan alone, without the counts, and says whether billing is configured on this deployment.

Unverified organizations

Before the owner email is confirmed, an organization is capped hard:

Inboxes 1
Recipients the owner's address only
Emails 10 a day, 100 a month
Custom domains 0
Webhooks 0
Sending domain agents.carlyemail.com

This is deliberate. Sign-up is a single unauthenticated call, which is what lets an agent create its own mailbox mid-conversation — so the abuse gate has to sit somewhere, and it sits on the recipient line: every message an unverified account can send goes to the one person who can shut it down. Domains and webhooks are barred because each is a way to make an unconfirmed account useful to somebody who does not own the address it was opened with.

An unverified key can read, label and organize its own mail, and email its owner — enough to prove a whole send/receive loop before any human steps in. Confirm with POST /v0/agent/verify and the free tier applies immediately.

The daily cap

The free tier's daily cap matters more than its monthly one. It is what stops a newly signed-up agent emitting three thousand emails in an hour and taking the shared subdomain's reputation down with it. Paid plans have no daily cap because they have a payment method attached and a person behind it.

What happens at the limit

Nothing degrades quietly. The request that would cross a cap is refused with 429 and a code naming what ran out.

When Code Refused at
Too many inboxes inbox_limit_reached POST /v0/inboxes
Too many domains domain_limit_reached POST /v0/domains
Too many pods pod_limit_reached POST /v0/pods
Too many webhooks webhook_limit_reached POST /v0/webhooks
Daily send cap daily_limit_reached any send
Monthly send cap monthly_limit_reached any send
Storage full storage_limit_reached any send

The two time-based caps carry a Retry-After header with the exact reset — next midnight UTC for the daily one, the start of next month for the monthly one. Not an estimate.

{
  "name": "RateLimitError",
  "code": "daily_limit_reached",
  "message": "Daily sending limit reached (100 on the free plan).",
  "fix": "Upgrade the plan, or wait for the limit to reset at 00:00 UTC."
}

The four creation caps reset on upgrade rather than on a clock, so their Retry-After is a formality — the fix string is the actionable part.

Storage

Over your storage allowance, sending is refused and so is creating an inbox.

Deleting messages frees the space back. Storage is counted from live messages, so a deleted thread stops counting as soon as it is deleted.

Message size

Maximum attachment size 25 MB
Default page size 50
Maximum page size 200

Suppression is not a limit

An address that hard-bounced or complained is refused at send time regardless of your plan and regardless of remaining quota. Those entries are read-only — you can see them, you cannot delete them. Continuing to mail an address that complained is what gets a whole sending domain blocked. See suppression.