Finding a customer
Ops → Customers
Use the search box to filter by workspace name or slug (ILIKE, minimum 1 character). You can also filter by status:
| Status | Meaning |
|---|---|
active |
Paid subscription, in good standing |
onboarding |
New account, not yet on a plan |
suspended |
Account suspended by ops |
The list is paginated using stable keyset cursors — the page order doesn't shift when new customers sign up mid-browse. Use Next / Previous to navigate.
Columns: Name (slug), Plan, Status, Members, Credits, Joined
Customer profile
Click any row to open the full customer profile. Viewing a customer profile is an audited action — it is logged to the ops audit trail with your email, their tenant ID, timestamp, and your IP.
What the profile shows
Header: Workspace name, status badge, slug, tenant ID, join date
4 stat cards:
| Card | Value | Notes |
|---|---|---|
| Plan | Plan name + billing cycle | "Pro · monthly" |
| Credits | Total balance (subscription + permanent) | Subscription credits expire at period end |
| Members | Count of workspace users | |
| Renewal | Next billing date | Shows "Ends at period end" if cancellation scheduled |
Members table — all users in the workspace with role and join date. Owners are highlighted.
Spend by service (30d) — horizontal bar chart showing net credit consumption broken down by service bucket (ai, blog, forms, email, content, analytics, other). Includes transaction count hints.
Recent transactions — last 15 credit ledger entries, consolidated:
- Hold/capture pairs are collapsed into a single net row (what was actually charged)
- Hold/void pairs are hidden (no net charge)
- Compensating refunds are shown as positive rows
Credit balance breakdown:
Total: 850 credits
├─ Subscription: 500 cr (expires 2026-07-28)
└─ Permanent: 350 crInternal notes — staff-authored notes on this workspace. See Notes and audit for details.
Credit balance explained
Each customer has two credit buckets:
| Bucket | Source | Expires? |
|---|---|---|
| Subscription | Included with their plan | Yes — at billing period end |
| Permanent | Purchased top-ups or manual grants | No |
The total visible in the list and profile is subscription + permanent. Expired subscription credits are automatically treated as 0 (lazy expiry — no cleanup job needed).
Revenue context
For billing context on a specific customer, cross-reference with the Revenue page which shows their plan, trial status, and past-due date at a glance.
API endpoint
GET /api/admin/customers/:tenantIdResponds with the full CustomerDetail shape. Writing a view_customer entry to ops audit log is part of this call.