Billing
Subscription management, plan details, Stripe checkout, and customer portal
Billing endpoints manage subscriptions, Stripe checkout sessions, and customer portal access. All payments are processed through Misar AI Technology Pvt. Ltd. via Stripe.
Billing endpoints use session authentication (dashboard cookie), not API key auth. They are intended for use in the MisarMail dashboard UI.
Plans
| Plan | Price | Description |
|---|---|---|
free | $0 / mo | Getting started — 1,000 emails/mo |
pro | $24.99 / mo | Growing teams — 25,000 emails/mo |
max | $99.99 / mo | High-volume senders — 100,000 emails/mo |
enterprise | Custom | Unlimited — contact sales |
See Plan Limits for the full feature matrix.
Get subscription
/mail/billing/subscriptionReturns the current subscription state, plan limits, usage, and trial status. null in limits means unlimited. trial_ends_at is a UTC timestamp during the 14-day trial; null after trial ends or on paid plans.
Response fields
successbooleantrue when the request succeeded.
subscriptionobjectPlan state: plan, status, trial_ends_at, current_period, cancel_at_period_end, overage_enabled.
limitsobjectPlan limits: emails_per_month, contacts, campaigns_per_month, templates, automations, custom_domains, dedicated_ips. null means unlimited.
usageobjectCurrent-period usage: emails_sent, contacts, campaigns.
curl https://api.misar.io/mail/billing/subscription \
-H "Cookie: sb-access-token=YOUR_SESSION"{
"success": true,
"subscription": {
"plan": "pro",
"status": "active",
"trial_ends_at": null,
"current_period": {
"start": "2026-04-01T00:00:00Z",
"end": "2026-04-30T23:59:59Z"
},
"cancel_at_period_end": false,
"overage_enabled": false
},
"limits": {
"emails_per_month": 25000,
"contacts": 10000,
"campaigns_per_month": null,
"templates": null,
"automations": 10,
"custom_domains": 3,
"dedicated_ips": 0
},
"usage": {
"emails_sent": 4218,
"contacts": 3102,
"campaigns": 7
}
}Subscription status values
| Status | Meaning |
|---|---|
trialing | Free trial active |
active | Paid subscription current |
past_due | Payment failed — grace period active |
canceled | Subscription ended |
paused | Manually paused via portal |
Create checkout session
/mail/billing/checkoutCreate a Stripe Checkout session for upgrading or subscribing to a plan. Returns a redirect URL. Redirect the user to checkout_url. Stripe handles payment collection and returns the user to success_url on completion.
Request body
planstringbodyrequiredpro, max, or enterprise.
success_urlstringbodyRedirect after successful payment.
cancel_urlstringbodyRedirect if user cancels checkout.
Response fields
successbooleantrue when the session was created.
checkout_urlstringStripe Checkout URL to redirect the user to.
curl -X POST https://api.misar.io/mail/billing/checkout \
-H "Cookie: sb-access-token=YOUR_SESSION" \
-H "Content-Type: application/json" \
-d '{
"plan": "pro",
"success_url": "https://mail.misar.io/settings/billing?upgraded=1",
"cancel_url": "https://mail.misar.io/pricing"
}'{
"success": true,
"checkout_url": "https://checkout.stripe.com/c/pay/cs_live_..."
}Create portal session
/mail/billing/portalCreate a Stripe Customer Portal session for managing the subscription (cancel, update card, view invoices).
Request body
return_urlstringbodyWhere to redirect after leaving the portal.
Response fields
successbooleantrue when the session was created.
portal_urlstringStripe Customer Portal URL.
curl -X POST https://api.misar.io/mail/billing/portal \
-H "Cookie: sb-access-token=YOUR_SESSION" \
-H "Content-Type: application/json" \
-d '{ "return_url": "https://mail.misar.io/settings/billing" }'{
"success": true,
"portal_url": "https://billing.stripe.com/session/..."
}Portal URLs expire after 5 minutes. Generate a fresh URL each time a user navigates to billing settings — do not cache them.