Questions · Updated 2026-09-28
What does plan_limit_reached mean?
plan_limit_reached means the account has used every email its plan includes for the current period, and the send was refused; nothing is charged, and sending resumes on the reset date the error names. GET /billing shows usage against the plan and period.resets_at, GET /billing/plan returns the plan, and an owner can upgrade or turn opt-in overage on with PUT /billing/overage.
plan_limit_reached means the account has used every email its plan includes for the current period, and the send was refused. retryable is false, and nothing is charged for the refused send. GET /billing/plan returns the plan on the account, GET /billing returns usage against it and the date the period resets, and the plans themselves are on the pricing page.
The message and the fix
The error 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." On the wire the message is specific: it names how many emails the account has used of how many its plan includes, and the date the period resets, and the fix repeats that date. This page does not restate what any plan includes. GET /billing/plan returns it as entitlements.included_emails_per_month next to tier, and the pricing page lists it.
Reading the account's usage
The summary of GET /billing is "Plan, usage against each published limit, and what the next tier changes." It returns limits, one row per metric with used, limit and at_limit, and the emails_per_month row is the one this error is about. period.resets_at is the reset date. overage reports enabled, cap_emails, consumed_this_period, policy (pause or bill) and auto_charges. GET /usage is per key, and a key's own budget is a different ceiling whose refusal is agent_budget_exceeded.
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
}daily_limit_reached is the Free plan's daily cap and overage_cap_reached is a paid plan that has also used the extra emails its owner allowed. What happens when I hit my plan limit? quotes both and lists the three ways sending comes back.
Overage is opt-in
Nothing is auto-charged. An owner on a paid plan turns overage on with PUT /billing/overage, sending enabled and cap_emails, the ceiling of extra emails per period; sends past the inclusion then continue up to that ceiling and no further. On Free the same call answers overage_not_on_plan, because Free pauses at its inclusion.
Until the reset
retryable is false, so stop sending until the reset date or until an owner acts. The inclusion is the account's, so no retry from any key passes and switching keys changes nothing. The decision is an owner's, made in Settings → Billing: move up a plan, or turn overage on with a ceiling. Budgets and the kill switch says limit.warning fires on the way up, before the plan inclusion is spent, so a webhook registered with POST /webhooks hears about the wall before a send meets it. The agent quickstart states the rule an agent should hold to: "Nothing is auto-charged, nothing is quietly allowed through, and no request you can make lifts your own ceiling."