Limits and quotas
Koltrix has two kinds of limit:
- Plan quotas: how much your workspace may use, such as sends per month or domains. They depend on your plan.
- Rate limits: how fast you may call the API. They are the same on every plan.
The numbers below are generated from the same configuration file the API enforces, so they can't drift from what your workspace actually does. Prices are on koltrix.com/pricing.
Plan quotas
| Limit | Trial | Starter | Pro | Scale |
|---|---|---|---|---|
| Team members included | 2 | 3 | 10 | Unlimited |
| Domains | 1 | 2 | 10 | Unlimited |
| Addresses | 3 | 10 | 50 | Unlimited |
| Workspace storage | 1 GB | 10 GB | 50 GB | Unlimited |
| Inbox sends / day | 50 | 500 | 2,000 | Unlimited |
| API + SMTP sends / month | 1,400 | 10,000 | 50,000 | Unlimited |
| API + SMTP sends / day | 200 | Unlimited | Unlimited | Unlimited |
| AI actions / month | 175 | 300 | 2,000 | Unlimited |
| AI actions / day | 25 | Unlimited | Unlimited | Unlimited |
| Newsletter contacts | 100 | 1,000 | 10,000 | Unlimited |
Unlimited means no ceiling is applied. A limit shown as 0 is not available on that plan.
API + SMTP sends is one allowance shared by POST /api/v2/emails and the
SMTP relay. Every recipient counts, including cc and bcc. A request that is
replayed with an Idempotency-Key doesn't count again.
Inbox sends are messages your team sends from the Koltrix app. They have their own daily allowance and don't use the API allowance.
When quotas reset
| Window | Resets |
|---|---|
| Daily | 00:00 UTC |
| Monthly | 00:00 UTC on the 1st of each calendar month |
Domains, addresses, seats, contacts and storage don't reset: they are counts of what you have. Remove something or upgrade to make room.
During the trial
Trial caps are tighter, because email infrastructure attracts abuse and every customer shares the sending reputation it would damage.
- 1 domain, which must pass SPF, DKIM and DMARC before any external send
- 3 addresses and 2 team members
- 50 external sends a day from the inbox
- 200 API and SMTP sends a day
- 1 GB of storage
- 25 AI actions a day
- After 7 days the workspace becomes read-only; after another 30 days without a plan the data is deleted, following three warning emails
What happens at a quota
A request that would go over a quota is refused. Nothing is queued to be sent later.
| Quota | Where it applies | Answer |
|---|---|---|
| API + SMTP sends (daily or monthly) | POST /api/v2/emails | 429 with Retry-After until the reset |
| API + SMTP sends (daily or monthly) | SMTP relay | 452 4.5.3 at RCPT or DATA |
| Inbox sends, AI actions | The Koltrix app | 429 until the reset |
| Domains, addresses, seats, contacts | The Koltrix app | 402 |
| Storage | Incoming mail | Deferred with 452 4.2.2, not lost |
Every quota refusal has the same JSON body, with "code": "quota_exceeded":
{
"code": "quota_exceeded",
"error": "You've hit this month's API sending limit. It resets on the 1st, or upgrade to send more now.",
"kind": "api_sends",
"limit": 10000,
"used": 10000,
"window": "month",
"resets_at": "2026-11-01T00:00:00Z",
"upgrade_url": "https://app.koltrix.com/settings/billing"
}| Field | Meaning |
|---|---|
code | Always quota_exceeded. Branch on this. |
error | A sentence you can show a person. |
kind | api_sends, inbox_sends, ai_actions, domains, addresses, seats, contacts or storage. |
limit / used | The cap and how much is used. |
window | day or month for quotas that reset; absent otherwise. |
resets_at | When the quota resets; absent for quotas that don't. |
upgrade_url | Where an owner can change the plan. |
Treat a quota refusal as something to tell a person about. Retrying straight
away won't work; wait until resets_at or upgrade.
The SMTP relay answers with a temporary 452 on purpose: a mail server that
gets it keeps the message and tries again for several days, which gives you
time to upgrade instead of losing the mail.
Rate limits
Each API key may make 60 requests per minute to /api/v2, counted over
a sliding window. Over that, the API answers:
HTTP/1.1 429 Too Many Requests
Retry-After: 60
{"error": "rate limit exceeded — 60 requests per minute per API key"}- The limit is per key, so one busy integration can't slow down another that uses a different key.
- One
POST /api/v2/emailscan address many recipients, so the request limit rarely limits how much you can send. - A rate-limit
429has nocodefield. A quota429has"code": "quota_exceeded". Handle them differently: waitRetry-Afterseconds for the first, tell a person about the second.
The Koltrix app and the AI assistants connection have their own limits, sized for people rather than scripts.
If a limit doesn't fit
Email [email protected]. Limits exist to stop abuse and protect the sending reputation every customer shares; a real workload that runs into one is a conversation, not a refusal.