Billing

Change Plan

post/api/v1/billing/change-plan

Request body

plan'free' | 'hobbyist' | 'developer' | 'startup' | 'enterprise' required
startup_variant'outbound' nullable

Startup only: pass the fixed value 'outbound' when selecting the supported $200 plan. Omit or pass null while keeping the current Startup subscription to clear a pending change without changing its legacy price.

Response

Successful Response

plan'free' | 'hobbyist' | 'developer' | 'startup' | 'enterprise' required
statusstring nullable

Stripe subscription status (active, past_due, ...) or None on Free.

cancel_at_period_endboolean

Whether the subscription is set to cancel at the period boundary.

current_period_endinteger nullable

Unix seconds when the current billing period ends, if subscribed.

pending_plan'free' | 'hobbyist' | 'developer' | 'startup' | 'enterprise'
pending_change_dateinteger nullable

Unix seconds when the pending plan change / cancellation takes effect.

pending_startup_variant'outbound' | 'inbound'
legacy_developer_priceboolean

True when the subscription's flat price is the retired $25 Developer price (sunset migration pending); the console surfaces the phase-out banner from this.

stripe_configuredboolean required

False when Stripe isn't configured server-side; the UI hides upgrade actions.

balanceinteger nullable

Stripe customer account balance in cents (negative = credit available, positive = amount owed). None on Free with no customer yet, or if the read failed.

estimated_next_billinteger nullable

Amount due in cents on the upcoming invoice (plan fee + metered overage accrued so far this cycle), net of any account credit. None when there's no subscription (Free) or the preview read failed.

Changes

No recorded changes to this endpoint across all 1 revision of this API.