Upgrade and downgrade

How plan changes work — pro-ration, timing, what carries over, and the placeholder for the upcoming Stripe billing flow.

Upgrading and downgrading

Switching plans is fully self-service today (no Stripe payment processing yet — that lands next sprint). Pricing and entitlements take effect according to the rules below.

# Upgrade

Upgrades take effect immediately. The moment you confirm the upgrade on the pricing page:

  1. account.plan_id updates to the new plan.
  2. account.status flips to active (or stays on trialing if you were mid-trial; switching to a paid tier ends the trial early).
  3. Feature gates re-evaluate against the new plan. Semantic AI Search, AI Coach apply, click-based rerank, etc. become available without any cache-refresh or re-login.
  4. Limit caps grow to the new tier — usage counters carry forward.

Pro-ration: today the back-bill is tagged on account.current_period_end for reconciliation when Stripe lands. The system records the upgrade date so the eventual Stripe invoice covers only the days at the new tier.

# Downgrade

Downgrades take effect at the end of the current billing cycle — you keep your existing features until then. The downgrade is queued on the account row; the daily housekeeping job applies it at the cycle boundary.

What carries over to the lower plan:

  • All product data, indexes, and synonyms.
  • Ranking rules and curated results.
  • AI Coach history (recommendations stay; the apply action requires the new plan to allow it).
  • Analytics history is capped at the new plan's retention — older records become inaccessible but aren't deleted until the next archival sweep (90 days).

What pauses:

  • Feature gates re-evaluate. Semantic AI Search, multi-language morphology, A/B testing, etc. lock based on the new tier.
  • Limit caps reduce. Existing over-cap usage isn't deleted, but new additions are blocked per Limits.

# Cancellation

Same mechanism as downgrade-to-Free with the additional 30-day data window: after the billing cycle ends, the account flips to cancelled, search continues to work in read-only mode for 30 days, and after that the data is purged per the retention policy in our Privacy statement.

# Trial transitions

Three trial-related transitions you'll see:

Transition What happens
Trial → paid Trial ends immediately, billing starts, all features stay unlocked.
Trial → Free (day 14) Auto-downgrade by EndExpiredTrials, features lock to Free.
Trial → cancel mid-trial Trial ends, account flips to Free, no charge.

# Stripe billing (next sprint placeholder)

The current implementation provisions accounts in trialing / active / cancelled states with no payment provider. When Stripe lands:

  • Tenants will add a payment method during the trial (we'll prompt at day 11).
  • post_trial_action on the account row dictates whether the trial ends → Free or → paid based on whether a card is on file.
  • stripe_price_id_eur and stripe_price_id_ron on the plans row are already wired in the schema, so the only remaining work is the webhook + checkout session controller.

For now: use the dashboard to change plans, and we'll true up any billable usage when Stripe is wired.

# Self-service vs sales-led

  • Free, Starter, Growth, Pro, Scale — fully self-serve. Sign up, pick a plan, go.
  • Enterprise — custom contracts, white-label, dedicated infrastructure, custom AI tuning. Email sales@skryx.io to start the conversation.

# See also

  • Pricing model — what each plan includes
  • Trial — how the 14-day trial works
  • Limits — what happens when you exceed a cap
esc