Skip to main content

Subscription Status API

Return the current subscription state for an organization. The dashboard calls this on every layout load to decide whether to render the paywall, the trial banner, or the free-tier usage gauge.

Base path: /subscription

Authentication is required: the caller must be a member of the requested org_id (or be a superadmin). Returns 403 otherwise. No specific scope is required beyond a valid session.


Get Subscription Status

GET /subscription/status?org_id={org_id}
ParameterTypeRequiredDescription
org_idUUIDYesOrganization ID

Response:

{
"success": true,
"data": {
"billing_enabled": true,
"has_subscription": true,
"status": "active",
"plan_tier": "pro",
"trial_ends_at": null,
"current_period_end": "2025-02-08T00:00:00Z",
"cancel_at_period_end": false,
"is_blocked": false,
"block_reason": null,
"source": "stripe",
"usage": null
}
}

Field reference:

FieldDescription
billing_enabledtrue when the billing feature is enabled for this org. false for self-hosted / grandfathered installs
has_subscriptionWhether the org currently has an active paid subscription
statusRaw status (e.g. active, trialing, past_due, canceled, free)
plan_tierPlan tier name (e.g. free, pro, business) or null
trial_ends_atTrial end timestamp or null
current_period_endWhen the current paid period ends, or null
cancel_at_period_endtrue if cancellation is scheduled
is_blockedtrue when the dashboard should show a hard paywall
block_reasonHuman-readable block reason (e.g. "trial_expired") or null
sourceWhere the entitlement comes from: stripe, free, grandfathered, or none
usageFor free orgs: { events_used, event_limit, percentage }. Otherwise null