Billing
Audience: Customer — this page documents billing, plans, and subscription management.
The billing page (/dashboard/billing) manages subscriptions, plan selection, and payment.
URL
/dashboard/billing
Access
Available to all plans. No feature gate.
Data Source
GET /api/v1/billing/status
Returns:
{
"status": "trial",
"trialDaysRemaining": 5,
"plan": {
"id": "pro",
"name": "Pro",
"seats": 1,
"currentPeriodEnd": "2026-03-09T00:00:00Z",
"cancelAtPeriodEnd": false
},
"features": { ... },
"usage": { "sessions": 42, "events": 1250 },
"plans": [...]
}
Status Banners
Context-aware banners appear at the top:
| Status | Banner | Color |
|---|---|---|
trial |
"Trial Period - N days remaining" | Blue |
expired |
"Trial Expired — Subscribe to continue" | Red |
active |
Current plan card with seat count | Neutral |
past_due |
Payment issue warning | Yellow |
canceled |
"Cancels at end of billing period" | Yellow |
Current Plan Card
When an active subscription exists:
- Plan name and seat count
- "Cancels at period end" warning if applicable
- "Manage Billing" button → Opens Stripe Customer Portal
Usage Metrics
Two cards showing current period usage:
| Card | Display |
|---|---|
| Sessions This Period | usage.sessions / features.sessionsPerMonth |
| Events This Period | usage.events / features.eventsPerMonth |
Limits display as formatted numbers (e.g., "50K", "1M") or "Unlimited".
Billing Controls
Interval Toggle
Two buttons to switch between:
- Monthly — Standard pricing
- Yearly — 17% discount (shown as green "Save 17%" badge)
Seat Selector
Increment/decrement control for the number of developer seats. Minimum 1 seat. Some plans have minimum seat requirements.
Plans Grid
Two plan cards displayed side-by-side:
Plan Card Contents
| Element | Description |
|---|---|
| Name | Plan name (e.g., "Pro") |
| Popular badge | Purple "Most Popular" badge (if applicable) |
| Description | Brief plan description |
| Total price | pricePerSeat × seats per interval |
| Per-seat breakdown | $X/seat × N seats |
| Min seats warning | Yellow text if selected seats < plan minimum |
Feature Checklist
Each plan card lists:
| Feature | Icon |
|---|---|
| Sessions per month | Zap |
| Retention days | Clock |
| Rule violation tracking | Check / X |
| Pattern detection | Check / X |
| Priority support | Shield / X |
| SSO / SAML | Users (Enterprise only) |
Plan Actions
| State | Button |
|---|---|
| Current plan | Disabled "Current Plan" (green) |
| Available plan | "Subscribe" or "Switch Plan" |
| Loading | Spinner |
Payment Flow
- User clicks "Subscribe" on a plan
- Client calls
POST /api/v1/billing/create-subscriptionwith{ planId, interval, seats } - Server creates a Stripe subscription and returns a
clientSecret - Payment modal opens with embedded Stripe Elements form
- User enters card details
- On success: modal closes, billing status refreshes
- On error: error message displayed in modal
Payment Modal
- Plan name header
- Error display (if applicable)
StripeProvider+PaymentFormcomponents- Cancel button to close modal
- Return URL:
/dashboard/billing?success=true
Manage Billing
POST /api/v1/billing/portal
Returns a Stripe Customer Portal URL. Redirects the user to Stripe where they can:
- Update payment method
- View invoices
- Cancel subscription
- Change plan
Enterprise Contact
A card at the bottom for enterprise inquiries:
- "Need more seats or custom requirements?"
- "Contact Sales" button →
mailto:enterprise@rulecatch.ai
Pricing Reference
| Plan | Monthly | Yearly (per month) |
|---|---|---|
| Starter | $49/seat | ~$41/seat |
| Pro | $199/seat | ~$165/seat |
| Enterprise | $499/seat | ~$414/seat |
See Also
- Pricing — Detailed plan comparison
- Feature Gating — What each plan unlocks
- Team — Managing seats and members
- Settings — Subscription status overview