Docs
Builder operations

Billing and promotions

Use the Stripe customer portal for invoices and payment methods. Run paid promotions from the development detail page when active price IDs are configured.

The builder console exposes two billing surfaces today:

  1. The Billing page at /teams/[teamSlug]/billing opens a one-shot link to your team's Stripe customer portal.
  2. The Promotion panel inside each development detail at /teams/[teamSlug]/developments/[developmentId] starts and cancels a featured-development promotion.

Both surfaces require manage-billing permission. Without it, the surfaces 404 on direct navigation and the nav items hide.

Who can manage billing

RoleBilling access by default?Notes
OwnerYesOwners have full team permissions, including billing.
AdminNoAdmins manage day-to-day team operations but do not manage billing by default.
MemberNoMembers do not manage billing.
Platform adminYesForcir platform administrators can support billing flows.

If a "Billing" item is missing from the team nav, the signed-in user probably lacks manage-billing.

Billing portal

Open the team workspace, then select Billing in the team nav. Select Open billing portal to launch the Stripe customer portal in a new tab.

The portal handles:

  • Payment methods.
  • Billing information.
  • Invoice history.
  • Subscription details (cancellation, plan change).

If the new tab does not open, check the browser's pop-up blocking settings. The one-shot link expires after a few minutes; if you wait too long, regenerate it from the Billing page.

A featured-development promotion gives a development paid placement in Solum's discovery surfaces.

Eligibility

The Promotion panel offers a checkout button only when all of the following are true:

RequirementWhy it matters
Team is a builder team and linked to a builderPromotions are tied to builder developments.
Development belongs to the linked builderA team cannot promote another builder's development.
You hold the manage-billing permissionCheckout and cancellation are billing actions.
The development is not already featuredAn existing featured status blocks duplicate checkout.
No active or pending promotion exists alreadyPrevents duplicate subscriptions or duplicate pending checkouts.
Stripe price IDs for the duration are configuredMonthly and quarterly require live Stripe Prices in environment.

If the environment is missing the Stripe price IDs (SOL-450 wired the config), checkout aborts with HTTP 503 and the message "Promotion checkout is not configured for this environment."

Durations

The flow supports Monthly and Quarterly. Pricing is shown in Stripe checkout. Do not rely on hard-coded prices in support replies.

Starting a promotion

  1. Sign in as a user with manage-billing.
  2. Open the builder team workspace and the development detail page.
  3. Pick Monthly or Quarterly.
  4. Select Feature this development.
  5. Complete Stripe checkout.

The promotion flips to active when Stripe fires the checkout.session.completed webhook. Until then it shows pending.

Cancelling a promotion

If a promotion is active, billing-authorized users can select Cancel promotion on the same development detail page. Cancellation schedules the subscription to end at the end of the current billing period; the development remains featured until that date.

Promotion statuses

StatusMeaning
PendingCheckout has started but Stripe has not activated it yet.
ActiveThe development is currently featured.
CancelledThe promotion has been cancelled or has run to expiry.
ExpiredThe promotion ended at the end of its billing period.

What is not in the billing surface today

  • Active promotions summary card on the Billing page. The Billing page only renders the customer-portal launcher today; the per-team promotion roll-up lives inline on each development detail page until the summary card ships.
  • Billing-only role (manage billing without consuming a seat). Roles available today are owner, admin, member. Use platform-admin support if a billing-only contact is needed.

These are roadmap items, not "ask Forcir" workarounds.

Why a checkout call may fail

FailureWhat to check
403 forbiddenThe signed-in user lacks manage-billing.
422 "development already featured"The development is already in a featured state. Cancel first if you need to recheck out.
422 "active or pending promotion exists"There is already a promotion row for this development. Resolve it (cancel or wait for Stripe webhook) before retrying.
503 "Promotion checkout is not configured"The Stripe price IDs are missing from the environment. Operator must set STRIPE_PRICE_FEATURED_MONTHLY and _QUARTERLY.
Portal or checkout does not openCheck browser pop-up blocking and network connectivity.

Support notes for billing questions

When reporting a billing issue, include:

  • Team name and slug.
  • User email and role.
  • Whether the issue is billing portal, checkout, cancellation, or promotion status.
  • Development name for promotion issues.
  • Screenshot or exact message from Stripe when available.

On this page