Subscriptions
Monitor and manage organization subscriptions from the admin Organizations page.
The shipped kit manages subscriptions from /dashboard/admin/organizations.
It does not include a standalone /dashboard/admin/subscriptions route or an
admin.subscription tRPC router.
Included Admin Controls
The Organizations table shows the latest subscription for each organization. Admins can:
- Search for an organization by name
- Filter organizations by subscription status or billing interval
- Open a stored subscription in Stripe
- Schedule a subscription to cancel at the end of its billing period
- Sync subscription and order data from Stripe
The table resolves configured Stripe price IDs to plan names where possible. It also shows the subscription status, scheduled cancellation and trial end date. It does not provide revenue analytics or payment history.
List Subscription Summaries
Subscription summaries are returned by the existing organization list procedure:
const { data, isPending } = trpc.admin.organization.list.useQuery({
limit: 25,
offset: 0,
query: '',
sortBy: 'name',
sortOrder: 'asc',
filters: {
subscriptionStatus: ['active', 'trialing'],
subscriptionInterval: ['month']
}
});
const organizations = data?.organizations ?? [];
// Each result includes subscriptionId, subscriptionStatus,
// subscriptionPlan and cancelAtPeriodEnd.There is no trpc.admin.subscription.list procedure. The list returns the most
recent stored subscription for each organization instead of every subscription
record.
Cancel a Subscription
The row action uses the admin organization router:
const cancelSubscription =
trpc.admin.organization.cancelSubscription.useMutation();
cancelSubscription.mutate({
subscriptionId,
immediate: false
});The shipped interface always passes immediate: false, which schedules the
subscription to cancel at the end of its current period. The procedure also
accepts immediate: true for custom admin interfaces. Stripe webhooks update
the local subscription record after cancellation.
Sync Billing Data from Stripe
Use the sync procedure with one or more organization IDs:
const syncFromStripe = trpc.admin.organization.syncFromStripe.useMutation();
syncFromStripe.mutate({
organizationIds: [organizationId]
});This syncs subscriptions and one-time orders for the selected organizations. The input accepts between 1 and 1,000 organization IDs. The Organizations table supports both a row action and a bulk action for this procedure.
Not Included
The current kit does not include:
- A separate admin subscriptions page
trpc.admin.subscription.list,trpc.admin.subscription.cancelortrpc.admin.subscription.syncFromStripe- A global subscription table with revenue or churn reporting
- Admin payment history or bulk subscription cancellation
Organization owners and organization admins manage their own billing from
/dashboard/organization/settings?tab=subscription through the
trpc.organization.subscription router.
Related Documentation
- Organizations - Use the shipped admin interface
- Subscriptions - Understand subscription billing
- Webhooks - Keep local billing data synchronized