Skip to content

Plans and billing

bssh Teams is free for small teams and offers simple per-seat billing for growing organizations. Billing is managed per team by team administrators.

A team’s seat count is determined by:

  • Active members: Every person who has accepted an invite and joined the team.
  • Pending invites: Invitations that have been issued but not yet accepted or revoked. Each pending invite holds one seat for 7 days or until an admin revokes it with bssh teams uninvite.

Every team created on the hosted sync server receives 3 free seats automatically. The free plan includes full access to end-to-end encrypted vaults, client synchronization, device verification, and signed audit logging. No credit card is required.

When your team exceeds 3 seats, an administrator subscribes for all seats currently in use. Subscriptions are billed per seat on a monthly or yearly cycle.

Check the current plan, seats in use, and renewal date:

bssh teams billing platform

Subscribe the team to a paid plan:

bssh teams billing platform --checkout --seats 8

To pay annually instead of monthly, add the --yearly flag:

bssh teams billing platform --checkout --yearly

If you omit --seats, bssh defaults to the number of seats currently in use, rounded to at least one seat above the free plan. The command opens Stripe Checkout in your default web browser.

Administrators can update payment methods, download invoices, adjust seat counts, or cancel subscriptions through the Stripe Customer Portal.

Open the customer billing portal in your browser:

bssh teams billing platform --manage

Bayesian SSH and the sync server never handle, process, or store credit card numbers. Both --checkout and --manage generate secure single-use redirect URLs to Stripe. All card transactions and billing address changes occur directly on Stripe’s infrastructure.

A team enters read-only mode if:

  • An active subscription lapses or is cancelled, and the team has more members and pending invites than the 3 free seats.
  • An administrator reduces the paid seat count in the billing portal below the team’s current member and invite count.

A read-only team remains functional for day-to-day operations:

  • Sync: Teammates can run bssh teams sync to pull existing connections.
  • Connect: Connecting to team hosts with bssh connect works without interruption.
  • Audit uploads: Session start events continue to be signed and uploaded to the audit log.
  • Device approvals: Admins can run bssh teams grant to approve keys for devices.
  • Removals: Admins can remove members (bssh teams remove) or revoke pending invites (bssh teams uninvite).

Modifications to the shared vault are blocked:

  • Adding or modifying connections (bssh teams share) is rejected.
  • Sending new team invitations (bssh teams invite) is rejected.

To restore write access, an administrator can either:

  1. Re-subscribe the team using bssh teams billing <team> --checkout, or
  2. Remove members or revoke pending invites until the total seat count is 3 or fewer.

If a renewal payment fails, Stripe enters an automatic retry period. The subscription status changes to past_due.

During this retry window:

  • The team is not immediately placed into read-only mode. All operations, syncs, and connections continue to work.
  • The desktop app displays a warning notice under Plan and seats: “The last payment failed; Stripe is retrying. Update the card in Manage billing.”
  • On the command line, bssh teams billing <team> displays Subscription status: past_due.
  • An administrator should open the billing portal (bssh teams billing <team> --manage or Manage billing) and update the payment card before the retry period expires.

Self-hosted sync servers run without Stripe billing integration.

  • Seat limits on self-hosted instances are fixed and configured directly by the server operator.
  • Running bssh teams billing <team> on a self-hosted instance shows:
    💳 platform: 5 of 20 seats used (this server has no billing)
  • The desktop application indicates that the server has no billing and that its operator sets the seat limit.