---
title: "Teams"
description: "One balance for up to 10 people. Every member keeps their own keys and logs."
canonical_url: "https://minirouter.sh/docs/teams"
markdown_url: "https://minirouter.sh/docs/teams.md"
last_updated: "2026-09-26"
---

# Teams

One balance for up to 10 people. Every member keeps their own keys and logs.

[Open Team](https://minirouter.sh/dashboard/team)

## What a team is

A team is a separate account with its own name and balance. Your personal account, keys and balance stay yours.

*Four members, each with their own key, all billing the Acme team balance.*

- **10** Members per team
- **3** Teams you can own
- **$0** To create one

- [One balance](https://minirouter.sh/dashboard/billing): The owner tops it up. Every team key bills it.
- [Your own keys](https://minirouter.sh/dashboard/keys): Made in the team, attributed to you.
- [Your own logs](https://minirouter.sh/dashboard/activity): Members see their own usage and activity.

## Roles

Each team has one owner. Everyone else is a member.

- **Owner**: Funds the team, sets limits, guardrails, routing and alerts, and manages members.
- **Member**: Makes keys, presets and guardrails, and sees their own keys, logs and the team balance.

| Action | Who |
| --- | --- |
| Create, name, rotate and revoke own [keys](https://minirouter.sh/dashboard/keys) | Owner and members |
| Set key limits and guardrails | Owner |
| See keys, usage and activity | Members see their own. The owner sees everyone's. |
| Create [presets](https://minirouter.sh/docs/presets) and [guardrails](https://minirouter.sh/docs/guardrails) | Owner and members |
| Edit presets and guardrails | Creator or owner |
| See the balance | Owner and members |
| Top up, [billing history](https://minirouter.sh/dashboard/billing) and export, whole team or one member | Owner |
| [Routing](https://minirouter.sh/dashboard/routing) and [alerts](https://minirouter.sh/dashboard/alerts) | Owner |
| Invite and remove members | Owner |

## Switching

*The account pill switching between Personal and Acme, where you are the owner.*

1. **Open the pill**: It sits in the dashboard rail, or the top bar on phones.
2. **Pick an account**: Personal or a team, with your role.
3. **Work there**: Every page shows the account you are in.

> **Note:** Signing out from a team signs you out entirely. A tab left in the other account reloads before it changes anything.

## Invite by email

In Team, choose Invite by email. Enter one address or paste up to 10, separated by commas, semicolons or new lines. Each person gets their own invitation, valid for 7 days.

1. **Open the invitation**: Sign in, or create an account and save your new key.
2. **Verify the invited email**: If needed, add the email to your current personal account using a verification code. It becomes a sign-in method; your keys and balance stay yours.
3. **Choose Join**: Only an account with the invited email verified can join. Forwarding the invitation does not grant access.

If the email belongs to another account, you can sign in to that account. Accounts are never merged automatically.

Owners can cancel or resend invitations. Resending replaces the old invitation. Sent means the mail service accepted it; check the recipient’s inbox to confirm delivery. Could not send and Send status unknown can be recovered with an explicit resend.

> **Note:** Invitations do not reserve places. A place is taken when someone joins; new invitations are unavailable while the team is full.

## Optional invite link

Shared links remain available. Anyone with the link can join; these links are not restricted to an email address.

*An invite link is copied, then three people join the team.*

1. **Copy the link**: Each team has one, shown once. Regenerate to copy it again; the old link stops working.
2. **Share it**: Valid for 7 days, until it is revoked or the team is full.
3. **They click Join**: Signed-out visitors sign in first, then return to Join.

> **Note:** Removing a member, or a member leaving, replaces the link.

## Keys belong to the member

- **Bills the team**: Every request on a team key draws from the team balance.
- **Attributed to you**: The key shows who made it. Rotation keeps that.
- [Yours to manage](https://minirouter.sh/dashboard/keys): Name, rotate and revoke your own keys.
- [Owner sets limits](https://minirouter.sh/docs/guardrails): Only the owner sets a key's spend limit and guardrail.

Removal decides what happens to a member's keys. See [Removal](https://minirouter.sh/docs/teams#removal).

## Balance

Members see the team balance on the dashboard and in the `X-Minirouter-Balance-Usd` header of every [response](https://minirouter.sh/docs/billing).

Only the owner [tops up](https://minirouter.sh/dashboard/billing). [Low-balance alerts](https://minirouter.sh/dashboard/alerts) go to the owner.

Account limits apply to the team as a whole, not per member.

- **50** Keys
- **100** Presets
- **20** Guardrails

## Personal account only

Switch to your personal account for these.

`Settings`, `Sign-in methods`, `Passkeys`, `Recovery links`, `Provider keys`, `Plans`, `Account merge`, `Feedback`

These are not offered to teams at all.

`Chat trial`, `Rewards`, `Free models`, `Startup credits`

[Chat](https://minirouter.sh/chat) in a team bills the team. Your conversations stay private to you.

## Removal

The owner picks what happens to a removed member's keys.

- **Revoke now**: Their next request is refused. A stream already running finishes.
- **Keep keys active**: The ex-member still holds them, and they keep billing the team.

Leaving revokes your keys. Removal and leaving both end the member's team sessions.

## Refusals

Every refusal names the team and links back here. The shape is the same as other [errors](https://minirouter.sh/docs/errors).

| Code | Message |
| --- | --- |
| `owner_only` | Only the owner of team Acme can do this. [minirouter.sh/docs/teams#roles](https://minirouter.sh/docs/teams#roles) |
| `team_context` | Not available in team Acme. Switch to your personal account at [minirouter.sh/dashboard](https://minirouter.sh/dashboard). Docs: [minirouter.sh/docs/teams](https://minirouter.sh/docs/teams). Team keys get the same refusal on dashboard routes. |
| `account_context_mismatch` | This tab was in another account context. Reload [minirouter.sh/dashboard](https://minirouter.sh/dashboard) and try again. |
| `team_full` | This team is full, so the invite cannot be accepted. [minirouter.sh/docs/teams#invite-link](https://minirouter.sh/docs/teams#invite-link) |
| `already_member` | You are already a member of this team. Open it at [minirouter.sh/dashboard](https://minirouter.sh/dashboard). |
| `teams_inactive` | Teams are not enabled yet. [minirouter.sh/docs/teams](https://minirouter.sh/docs/teams) |
| `insufficient_credits` | Insufficient credits: your team's available balance is $4.23, below this request's worst-case estimate of $5.10, so it was not sent and nothing was charged. Only the team owner can top up. Top up at [minirouter.sh/dashboard/billing](https://minirouter.sh/dashboard/billing) |
| `member_removed` | This key's member was removed from team Acme. It still serves inference; dashboard access needs an active membership. [minirouter.sh/docs/teams#removal](https://minirouter.sh/docs/teams#removal) |
| `membership_removed` | Your membership of this team was removed. Switch to your personal account at [minirouter.sh/dashboard](https://minirouter.sh/dashboard). [minirouter.sh/docs/teams#removal](https://minirouter.sh/docs/teams#removal) |

## Related

- [Guardrails](https://minirouter.sh/docs/guardrails): Budgets, lists and filters per key.
- [Presets](https://minirouter.sh/docs/presets): Saved model and routing settings.
- [Billing](https://minirouter.sh/docs/billing): Credits, deposits and request costs.
