Limits & errors
How quotas, rate limits, and error responses work.
Plan quota
Texts are capped per billing period by your plan, and the same quota is shared across the dashboard, the REST API, and MCP:
- Starter — 100 texts / month.
- Pro — 1,000 texts / month.
Each accepted message consumes one text; failed sends are refunded and never count. Check remaining quota any time with GET /v1/usage. Creating a campaign larger than your remaining quota is rejected with 402 and a remaining field.
Rate limits
Requests are rate limited per key (120 requests/minute by default). Responses include X-RateLimit-Limit and X-RateLimit-Remaining; exceeding it returns 429. This is separate from your text quota — it only bounds API call frequency, not how many texts you send.
Error format
Errors are JSON with a stable machine-readable code:
Example
{ "error": "Requested 500 but only 80 text(s) remain this period.", "code": "OVER_QUOTA", "remaining": 80 }400 BAD_REQUEST— invalid body / no valid recipients.401 UNAUTHORIZED— bad or missing key.402 NO_ACTIVE_PLAN/OVER_QUOTA— billing/quota issue.404 ORG_NOT_FOUND/CAMPAIGN_NOT_FOUND.429 RATE_LIMITED— slow down.503 NOT_CONFIGURED— texting isn't set up on the account.
Need a key? Head to API keys.