Interface SubscriptionPlan

Public subscription plan returned by GET /v1/subscriptions/plans.

Stripe price identifiers are intentionally not exposed by the public API.

interface SubscriptionPlan {
    displayName: string;
    google?: { productId: string };
    interval: SubscriptionPlanInterval;
    planId: SubscriptionPlanId;
    priceUsd: number;
    term: SubscriptionTerm;
    tier: SubscriptionPlanId;
    vendorDiscountBps: number;
}

Properties

displayName: string

Human-readable label supplied by the server.

google?: { productId: string }

Google Play product configuration for this (tier, term), present only when a Play subscription product is configured server-side. The productId is the public Play SKU a Trusted Web Activity / Android client passes to the Digital Goods API to start a Play Billing purchase. Absent for plans with no Play product (e.g. on web-only deployments). There is no Stripe/Apple analog: Stripe price ids are intentionally not exposed, and Apple SKUs are supplied by StoreKit rather than this catalog.

Stripe recurring interval implied by term.

Plan/tier identifier passed to checkout.

priceUsd: number

Display-only list price in whole USD.

Billing cadence for this plan entry.

Alias of planId, included for display and filtering.

vendorDiscountBps: number

Frontier vendor-model discount for this tier, in basis points, applied to the artist-facing price of premium third-party vendor models (gpt-image-2, seedance-2-0, seedance-2-0-mini, seedance-2-0-fast, seedance-2-5, happyhorse-1.1-*) while the member is subscribed. Drives member-benefit display and non-member upsell copy so consumers render the rate without hardcoding it (500 = 5%, 1000 = 10%). The discount itself is enforced server-side at the cost layer.