API Reference
Billing
Query plan information and usage via the API.
Get current plan
GET /v1/billing/plan
Requires read_only scope.
Response
{
"plan": "pro",
"billing_period": "monthly",
"emails_per_month": 50000,
"emails_per_day": 0,
"overage_per_thousand": 0.50,
"max_overage_emails": 150000,
"features": {
"blocklist_monitoring": true,
"reputation_tracking": true,
"bimi_support": true,
"deliverability_reports": true,
"analytics_export": true,
"analytics_benchmarks": true
}
}
Get usage
GET /v1/billing/usage
Requires read_only scope.
Response
{
"period_start": "2025-03-01T00:00:00Z",
"period_end": "2025-04-01T00:00:00Z",
"emails_sent": 12500,
"emails_limit": 50000,
"emails_remaining": 37500,
"overage_email_count": 0,
"usage_percent": 25
}
Create checkout session
POST /v1/billing/checkout
Requires full_access scope. Creates a Stripe checkout session to upgrade, downgrade, or add a payment method.
Request body
{
"plan": "business",
"billing_period": "annual"
}
| Field | Type | Description |
|---|---|---|
plan | string | Target plan: pro, business, enterprise. |
billing_period | string | monthly (default) or annual. |
Response
{
"url": "https://checkout.stripe.com/..."
}
Redirect the user to the returned URL to complete payment.
Plans and pricing
| Plan | Monthly | Annual (per month) | Emails/month | Overage |
|---|---|---|---|---|
| Free | $0 | N/A | 3,000 | None |
| Pro | $18/mo | $15/mo ($180/yr) | 50,000 | $0.50/1K |
| Business | $79/mo | $66/mo ($792/yr) | 200,000 | $0.35/1K |
| Enterprise | Custom | Custom | Unlimited | Custom |
Overage billing
When you exceed your monthly quota on Pro or Business:
- Emails continue to send (no hard cutoff)
- Usage above the quota is billed at the overage rate at the end of the billing period
- A spending cap limits total overage: 3× the included quota (Pro: 150K extra, Business: 600K extra)
- If you approach 80% of your monthly quota, Sendr sends a warning email
If overage emails are attempted after the cap is reached, the API returns overage_limit_reached (429).
A valid payment method is required before overage kicks in. Without one, overage sends return payment_required (402).
Billing suspension
If a payment fails and is not resolved within the grace period, the account is suspended. API calls return billing_suspended (402) until the payment method is updated.