Questions · Updated 2026-09-28

What happens when I hit my plan limit?

When you hit your plan limit, the next send is refused with plan_limit_reached and nothing is queued or charged. GET /billing shows usage against the limit; sending resumes when the period resets, when you change plan through POST /billing/portal, or when an owner turns overage on with PUT /billing/overage.

When you hit your plan limit, POST /emails refuses the next send with plan_limit_reached. The catalogue message is "This account has used every email included in its plan for the current period." and the fix is "Upgrade in Settings → Billing, or wait until the reset date in this error." Nothing is queued behind the refusal and nothing is charged. The llms.txt promise is "No silent overage: sends stop at the inclusion and nothing is auto-charged unless you turned overage on with a ceiling." GET /billing shows how close you are.

The refusal

Each email is accepted or refused whole; the FAQ says "each email is either accepted or refused, never something in between." In POST /emails/batch, the summary is "Each item succeeds or fails on its own — read data[i].status.", so the items before the line are accepted and the rest carry the error. retryable is false: retrying before the reset date returns the same code. POST /emails/preflight reports the same refusal without sending, so a script can check before a run. Sends to @simulator.agentisend.com skip the meter and keep working.

Free carries a daily cap as well. That refusal is daily_limit_reached: "This account has sent its daily allowance of emails; sending resumes at 00:00 UTC." The fix is "Wait for 00:00 UTC, or upgrade in Settings → Billing — every paid plan has no daily cap." What each plan includes per period and per day is on the pricing page, and GET /billing/plan returns the plan on the account.

The inclusion is checked before any key budget. A key budget cannot lift it: key_budget_exceeds_plan says "A key budget cannot be unlimited or larger than the emails this plan includes per month."

The warnings before the wall

Two signals arrive on the way up. Budgets and the kill switch says limit.warning fires on the way up, before a key budget or the plan inclusion is spent; for the inclusion, api_key_id in the payload is null. Subscribe to it with POST /webhooks. The bell and the owners' inbox get a billing notification titled "80% of this period’s emails used", then "This period’s included emails are used", each naming the reset date.

curl -sS -X GET https://api.agentisend.com/billing \
  -H "Authorization: Bearer $AGENTISEND_API_KEY"
200
{
  "currency": "string",
  "limits": [],
  "next_tier": {},
  "overage": {},
  "payment": {},
  "period": {},
  "plan": {},
  "pricing_document_version": 1
}
Response

GET /billing — "Plan, usage against each published limit, and what the next tier changes." limits[] has a row with metric emails_per_month, used, limit and at_limit, the sentence for what happens at the line. period.resets_at is when the counter turns over. overage says whether overage is enabled, its cap_emails and consumed_this_period.

Getting sending back

There are three ways, and none happens on its own.

  • Wait. Sending resumes at period.resets_at.
  • Change plan. POST /billing/checkout starts a paid plan on an account that has none. With a live subscription it is refused with subscription_active — "This account already has a live subscription." — and the fix points to POST /billing/portal, where plan changes are made. Both are owner-only.
  • Allow overage. PUT /billing/overage — "Console: turn opt-in overage on (with a ceiling of extra emails per period) or off. Owner only; paid plans only." Send enabled and cap_emails. Sends past the inclusion then continue up to that ceiling, and at the ceiling the code is overage_cap_reached: "This account has used every email in its plan and every extra email its owner allowed this period." On Free the switch is refused with overage_not_on_plan: "Overage is available on Starter, Pro and Scale. This account is on Free, which pauses at its inclusion."

Next