/v1/account/subscriptionAccount subscription
billing:readThe account plan, status, and renewal from the local cache, merged with the live Stripe subscription (plan name, amount, next invoice) and the current quota usage.
Responses
200The merged subscription viewplanstring requiredThe EFFECTIVE plan: what this account can actually do right now. Entitlements and quotas all flow from this, including during a trial.
statusstring | null requiredSubscription status, mirroring Stripe. Metadata for display; capability comes from `plan`. Null when there is no subscription.
cancelAtPeriodEndboolean requiredTrue when the subscription ends at the period boundary rather than renewing. Nothing is downgraded until then.
renewsAtstring | null requiredWhen the plan next renews, as an ISO 8601 instant. Null when there is nothing to renew.
billingEmailsEnabledboolean | null requiredWhether Stripe billing emails are sent to this account. Null when not configured.
liveLiveSubscription requiredThe subscription read live from Stripe. Null when there is no subscription, or when the live read failed — check `liveError` to tell those apart.
idstring requiredThe Stripe subscription id.
statusstring requiredThe Stripe subscription status. A trial is `trialing` over the trialled plan, not a separate plan.
priceIdstring requiredThe Stripe price the subscription is on.
planNamestring requiredThe plan this subscription grants.
amountnumber requiredPrice per seat per interval, in the currency’s SMALLEST unit (4900 = $49.00). Multiply by `quantity` for the recurring total.
currencystring requiredISO 4217 currency code, lower-case.
intervalstring requiredBilling interval: `month` or `year`.
currentPeriodEndstring requiredWhen the current billing period ends, as an ISO 8601 instant.
cancelAtPeriodEndboolean requiredTrue when the subscription is set to end at `currentPeriodEnd` instead of renewing. The plan stays fully active until then.
quantityinteger requiredSeats currently billed by Stripe. This is seats PAID FOR, which can differ from seats occupied.
nextInvoiceAmountnumber | null requiredPreview of the next invoice total, in the currency’s smallest unit. Null when Stripe has nothing to preview, which is normal for a cancelled or ended subscription.
liveErrorboolean requiredTrue when the live Stripe read failed. The rest of this response is still authoritative: `plan`, `status` and `quotas` come from our own records, so a Stripe outage does not change what the account may do.
quotasarray of BillingQuotaView requiredEvery numeric allowance this plan sets, with current usage.
metricstring requiredThe quota metric key. Stable; branch on this rather than on `label`.
labelstring requiredHuman-readable name of the metric, for display.
limitinteger requiredThe ceiling this plan allows. A value of -1 means unlimited.
usedinteger requiredHow much of the allowance is consumed.
remaininginteger requiredWhat is left. Reaching zero is refused with a 429 for a usage metric and a 402 for a capacity metric such as seats.
grantSubscriptionGrantView requiredA plan granted outside Stripe, when one is in force. Null otherwise.
planstring requiredThe plan granted directly rather than through a paid subscription.
expiresAtstring | null requiredWhen the grant lapses, as an ISO 8601 instant. Null means it does not expire on its own.
401No or invalid credentialcodestring requiredStable machine-readable error code. Branch on this, never on the numeric status.
bad_requestunauthorizedsignature_requiredpayment_requiredforbiddennot_foundconflictgonepayload_too_largeunprocessable_entitytoo_many_requestsinternal_errornot_implementedbilling_unavailablenot_contactablemailbox_link_unavailablemailbox_requiredmail_engine_unavailablewebhook_publisher_unavailabledatabase_unavailableclient_errormessagestring requiredHuman-readable explanation of the refusal.
statusinteger requiredThe HTTP status code, repeated in the body.
remedyobjectA self-serve path forward, when one exists (a 402 points at the credit top-up).
kindstring requiredWhat kind of remedy this is, so a client can route it: whether the caller can clear the condition through the API, or a person must act in the web app.
topupconnect_mailboxurlstring requiredWhere to go to clear the condition: an API path, or a web app page when only a person can.
403Missing billing:readcodestring requiredStable machine-readable error code. Branch on this, never on the numeric status.
bad_requestunauthorizedsignature_requiredpayment_requiredforbiddennot_foundconflictgonepayload_too_largeunprocessable_entitytoo_many_requestsinternal_errornot_implementedbilling_unavailablenot_contactablemailbox_link_unavailablemailbox_requiredmail_engine_unavailablewebhook_publisher_unavailabledatabase_unavailableclient_errormessagestring requiredHuman-readable explanation of the refusal.
statusinteger requiredThe HTTP status code, repeated in the body.
remedyobjectA self-serve path forward, when one exists (a 402 points at the credit top-up).
kindstring requiredWhat kind of remedy this is, so a client can route it: whether the caller can clear the condition through the API, or a person must act in the web app.
topupconnect_mailboxurlstring requiredWhere to go to clear the condition: an API path, or a web app page when only a person can.