Skip to content

Teams & roles ​

A team (organization) groups your company's accounts: shared seat licensing that gives members full Studio access, a shared equipment library that only your team can see, and one place for billing. Everything lives in one dialog: Account menu → Team….

Creating or joining a team ​

When you're not in a team, the dialog offers two actions:

  • Create a team: type a name and click Create. You become the owner.
  • Join a team: paste an invite code and click Join. You join as a member.

Each account belongs to at most one team. To switch teams, leave your current one first.

Roles ​

RoleCan do
OwnerEverything: billing and seats, change any member's role, hand ownership to an admin, remove anyone (including admins), rename, delete the team.
AdminManage members (remove members, not other admins), assign seats, send invites, rename the team.
MemberSee the roster and their own seat status, and publish to and edit the team's equipment library (on a Pro or Studio plan).

The members list shows each person's email, role, and seat status. The owner gets a Member/Admin dropdown on every other member's row; admins and owners get an × (Remove from team) to remove people they're allowed to remove. The team creator is the owner; everyone who joins starts as a member; promote them after they join.

Handing the team to someone else ​

A team always has exactly one owner. To pass ownership on, the owner first makes the person an Admin with the role dropdown, then clicks the crown icon (Make owner) on their row and confirms: "Make name@company.com the owner of this team? They will control billing and members, and you will become an admin." The new owner takes over billing and the team's settings; you stay on the team as an admin, and can leave it from there.

Seats: Studio for licensed members ​

A team buys a number of seats, and admins hand them out per member:

  • Assign seat licenses a member; the button flips to Licensed (click again to take the seat back). Members without a seat show No seat.
  • A licensed member of an active (or LED.FYI-sponsored) team is elevated to full Studio access, regardless of their personal plan. Unlicensed members keep whatever personal plan they have.
  • Assigning is capped by the seat count: with no free seats, add seats first.
  • The dialog header shows the live status and usage, e.g. · active · 3/5 seats.

Your own Plan & billing dialog shows · via your team (or · sponsored) when your Studio access comes from a seat.

The team's seats and your personal plan are two separate subscriptions, and each is changed on its own. Buying, upgrading or downgrading your personal plan only ever touches your personal subscription (it can never re-price the team's seats), and changing the team's seat count in this dialog never touches anyone's personal plan.

They are also billed to two different Stripe customers, so Change plan in Stripe on your own Plan & billing dialog opens a portal showing only your personal subscription. Team seats are bought and resized here, in the Team dialog, never in that portal.

WARNING

Leaving the team (or losing your seat) drops you back to your personal plan immediately.

Seats before billing is active ​

You can hand out seats before the team has a subscription (useful when you want the roster ready the moment billing starts), and a team whose payment has failed keeps its roster intact rather than throwing errors at you mid-assignment. In both cases the seat is recorded, but it grants nothing until billing is current, and the dialog says so rather than letting it look like it worked:

  • An amber notice sits above the members list: "This team's subscription isn't active, so seats grant nothing yet. Licensed members stay on the Free plan until billing is current." Owners are pointed at the Team subscription card above it; admins and members are told to ask the owner, because only the owner can change billing.
  • Every licensed row reads Licensed · not active with an amber warning icon instead of the usual green Licensed tick, so you can see at a glance which seats are real.
  • Assigning a seat in that state raises a warning that stays on screen until you dismiss it, with the same explanation. The seat is saved; it just isn't doing anything yet.

Everyone who can see the roster sees this, not just the owner: an admin can hand out seats without ever seeing the billing card, so the notice has to reach them too.

Once the subscription is active (or LED.FYI sponsors the team), the notice disappears and every already-assigned seat starts conferring Studio immediately; nothing needs re-assigning.

When the team has more seats than its plan pays for ​

A seat change made directly in Stripe (for example through Manage billing) can leave a team paying for fewer seats than its members hold. Nobody loses access when that happens: the team keeps a seat for everyone who has one. But the team is now holding seats it isn't paying for.

Owners and admins see this for as long as it lasts; members see nothing different:

  • The dialog header adds the paid count in amber, e.g. · active · 3/3 seats · 1 paid.
  • An amber notice above the members list reads "Your plan pays for 1 of this team’s 3 seats" and stays until someone decides what to do. The choices:
    • Pay for N seats (owner only): after a confirmation, changes the team subscription to pay for all of the team's seats (Stripe charges the prorated difference). Available seats are kept. The notice clears as soon as Stripe confirms, usually within a few seconds. Update seats in the Team subscription card works too, if you want a different number.
    • Remove N unpaid seats (owners and admins): shown when unpaid seats aren't assigned to anyone. After a confirmation, those seats are removed from the team. It never takes a seat away from anyone and doesn't change the bill.

Seats never disappear on their own. When a member leaves, is removed, or has their seat taken back, the seat stays with the team as an available seat, ready to assign to someone else, whether or not the plan pays for it. A routine renewal of the subscription doesn't change that either. Reducing a team's seats is always a choice its owner or an admin makes, with one of the options above.

Inviting people ​

Admins and owners can invite two ways:

  • Invite by email: enter an address and click Invite. This mints a single-use join code (valid 14 days), emails it to that address, and tracks it under pending invites, where you can copy the code or revoke it (trash icon). Each pending invite is marked (pending), or (expired) once its 14 days are up. Inviting the same address again reuses the pending invite (refreshing its expiry) and sends the email again; that's how you nudge someone who lost it.
  • Generate invite code: a shareable multi-use code (valid 30 days), shown with a copy button. Nothing is emailed; deliver it however you like.

Either way, the invitee pastes the code into Team… → Join a team on their own account. The invite email spells out those steps, so an emailed invitee doesn't need to be told separately.

An email invite only works for the address you typed

The code is bound to that exact address: the invitee must be signed in to LED.FYI with it (and have confirmed it) before Join will accept the code. If they sign up under a different address, the join is refused. Revoke the invite and send a new one to the address they actually use.

If LED.FYI is ever invite-only

LED.FYI can require an access code before a new account reaches the app (it did during the private beta). While that's switched on, a team invite is not an access code: someone without an account still needs a code as well, and the invite email adds a paragraph saying so and telling them to ask you for one. While it's off, the email doesn't mention it.

When the email can't be sent ​

The invite is written before the email goes out, so a mail-provider problem never costs you the invite: the code is minted, valid, and pending either way. The team dialog says so plainly rather than letting a failed send look like a successful one:

  • A warning appears under the Invite button: "We couldn't email the invite to name@company.com. The invite is valid. Copy the code and send it to them yourself, or click Invite to try again. If it keeps failing, email support@led.fyi." It carries the full join code with a copy button, because the fix is to deliver that code by hand; the person just never got the mail.
  • The address stays in the box (a successful invite clears it), so clicking Invite again is a one-click retry.
  • That invite's row in the pending list reads (not emailed) instead of (pending) for the rest of the session, so if you invite several people at once you can see exactly which ones to follow up by hand. A retry that succeeds clears both the warning and the marker.

A successful invite stays silent: no banner, no confirmation to dismiss. If the warning keeps appearing for every address, mail delivery is broken on our side: keep handing out codes by hand and email support@led.fyi.

Renaming, leaving, deleting ​

  • Rename (admins and owners): under Team name, click Rename, edit the name, then Save (or Cancel).
  • Leave team (admins and members): removes you from the roster and drops any seat elevation. The owner has no Leave team button, because a team can't be left without an owner: first hand the team to an admin, then leave as an admin, or delete the team.
  • Delete team (owner only): after a confirmation ("Delete “Team name”? This cancels the team subscription and removes every member. This cannot be undone."), the team subscription is canceled and every member is removed, irreversibly.

Billing is ended before anything is deleted

Deleting a team always stops its billing first. If the team's stored subscription reference is missing or out of date, we ask Stripe directly what that team's customer is still paying for and cancel every live subscription we find, so a deleted team can't keep charging you.

If Stripe can't be reached, the delete is refused and the team is left exactly as it was, rather than removed with a subscription still running behind it. Wait a moment and try again; if it keeps failing, email support@led.fyi rather than assuming the team is gone.

Team billing (owner only) ​

Cancelling a team subscription

A cancelled team subscription behaves the same way a personal one does: the team keeps its seats until the end of the paid period, then drops. Unlike a personal plan, the Team dialog does not yet show that end date, so after cancelling, confirm the date in the Stripe portal via Manage billing rather than expecting the app to state it.

In the desktop app, subscribing and Manage billing open Stripe in your web browser; switch back to LED.FYI when you're done and the app picks up the change (see Plans & billing).

The owner sees a Team subscription card whose contents depend on the team's state:

StateWhat the owner sees
Sponsored by LED.FYI"Sponsored by led.fyi: N seats. Assign them to members below." No self-serve billing.
Active / trialingA seat-count field (never below the number of currently-licensed members) with Update seats (prorated via Stripe) and Manage billing (the Stripe portal).
Not subscribedA seat-count field (from 1 seat; no minimum), a Monthly / Yearly toggle, the seat-price table below, and Subscribe (N seats) via Stripe Checkout, fully self-serve.

Update seats changes the one seat line your team is billed for. If the team's subscription was changed by hand in Stripe (for example by support, from monthly to yearly), Stripe can leave the old seat price on it at a quantity of zero; that leftover is ignored, so it never starts billing again. If Stripe shows more than one billed line on the team's subscription, Update seats refuses with an error instead of guessing which one to change; contact support@led.fyi to have it tidied up.

Team seats are self-serve at a published per-seat price with volume discounts: every licensed seat is full Studio, and the whole team bills at the rate of the bracket its seat count lands in:

SeatsMonthly (per seat)Yearly (per seat)
1–9$34.99$289.99
10–24$32.99$269.99
25–49$29.99$245.99
50+$27.99$231.99

If LED.FYI has attached a negotiated per-seat price to your team (hand-arranged deals), checkout uses that price automatically and the card says so in place of the table. Questions about team pricing: support@led.fyi.

LED.FYI · Make every pixel count.