Manage · Billing & license

Billing & license

Solo Hosted is a flat $25/mo for one user; Team is $50/seat/mo, billed monthly or annual. Stripe-billed at the team level. License keys are signed JWTs the hosted issuer mints; each bound desktop carries one with a 30-day expiry. Soft grace if a renewal fails: the subscription stays entitled while past due, for 30 days by default, so the team rollup keeps streaming while you sort the card out.

Start here if you want to set up your team's plan, seats and bound devices: Team home (hosted).

See it in motion

Where to find it

  • Hosted: https://www.repoops.ai/billing (any member can open it; subscribing and managing need owner or admin).
  • Stripe: Each team has a Stripe customer + subscription. Card and seat changes go through the Stripe customer portal.
  • License key: Signed RS256 JWT, minted on subscription start and renewed by the desktop through GET /api/license. 30-day expiry.
  • Admin console: Seats used vs. paid, plan and subscription status, bound devices, at /team/overview.

What it does for you

One subscription, every developer.Per-seat pricing. The seat count is the Stripe quantity: pick it at checkout, change it in the portal, and the next invoice picks it up. No per-developer setup beyond the binding flow.
Soft grace, not a kill switch.If a renewal fails, the subscription sits in past due and stays entitled for the grace window (30 days by default, set by STRIPE_PAST_DUE_GRACE_DAYS, clamped to 7 to 365). The hosted rollup keeps streaming and license renewals keep working. Only after the window does the daily sweep cancel the subscription.
License keys verify offline.Each desktop's license is a signed JWT it verifies with the issuer's public key, without phoning home. A brief Vercel outage doesn't freeze the dashboard.

Configure

Mostly hands-off after sign-up. A few things to know:

  • Plan: Solo Hosted ($25/mo flat, single user) vs. Team ($50/seat/mo, adds multi-user connect + sync, governance rollup, budget alerts) vs. Enterprise (contact sales; adds SSO, SCIM, audit export).
  • Billing period - monthly or annual. Annual is 12 months for the price of 11; the annual button appears once the operator has provisioned the annual Price.
  • Seat count - the Stripe quantity, chosen at checkout and changed in the portal. An invite is refused when members plus pending invites reach the paid count, and a member ranked past the paid count is locked out of /team until seats are added.
  • Card - manage in the Stripe customer portal (link from /billing).
  • Tax - Stripe Tax is on at checkout. Stripe collects tax only where an active tax registration exists in the Stripe dashboard; with none, checkout is unchanged.

Use it well

  1. Buy the seats before you send the invites.

    An invite is refused at capacity, and the remedy it names is adding seats. Check seats used vs. paid on the admin console at the start of each month.
  2. Watch the bound-devices count weekly.

    Keys expire 30 days after issuance; the desktop renews its own while it is online. The admin console shows bound devices, including revoked ones, so a device you no longer recognise is a revoke away.
  3. Use annual billing for stable team sizes.

    Annual billing is 12 months for the price of 11: lock in the rate. Use monthly while sizing the team.
  4. If a renewal fails, fix the card inside the grace window.

    The grace window is generous, not infinite. After it, the subscription is cancelled, GET /api/license answers 402, and each desktop's key runs out at its own 30-day expiry.

Read more

Last updated