> ## Documentation Index
> Fetch the complete documentation index at: https://docs.reactor.inc/llms.txt
> Use this file to discover all available pages before exploring further.

> ## Agent Instructions
> To build and serve your own model, start at /deploy/development/quickstart and /deploy/development/overview. Deploying is the default path: reactor init scaffolds a workspace, reactor auth login authenticates, and reactor model deploy registers the model, publishes the release with the weights/ folder, and activates it on Reactor's GPUs, in one command from that workspace. Docker must be running, because the publish step builds the image locally. Bump model.version in reactor.yaml before redeploying a change, because a release that already has an image is reactivated as it is. Deployment access is granted per account, so contact team@reactor.inc if a deploy is refused. Every key in reactor.yaml is documented at /deploy/platform/reactor-yaml. Model code imports reactor_runtime; Python client code imports reactor_sdk. The runtime overview explains the model interface. Running the model on your own machine with reactor run is optional and needs a GPU you attach with --gpus; /deploy/development/local-testing covers that loop and pairs a complete brightness model with a Python client test in a separate brightness-test workspace.
> Reactor hosts multiple models, each with its own connect slug (modelName) and command/event schema. The video model catalog — slug, typed SDK package, and links to its schema — is at /model-api-reference/overview. Robotics policy documentation starts at /robotics/overview; X-WAM observations, actions, and client integration are under /robotics/xwam/; Cosmos3 Nano Policy DROID is under /robotics/cosmos/nano-policy-droid/. Some models expose one slug per experience (e.g. HappyOyster); always take the slug from the model's own pages, never guess it.
> Fastest path to a working app: `npx create-reactor-app my-app --model=<slug>` scaffolds a complete app with secure auth wired up. Typed TypeScript SDKs are published as @reactor-models/<model>; Python uses the base reactor-sdk package.
> Auth: exchange an API key (rk_...) for a JWT via POST https://api.reactor.inc/tokens from your server. Never put the API key in client-side code.
> Append .md to any docs URL for clean Markdown. Search these docs via the MCP server at https://docs.reactor.inc/mcp.

# Members and Roles

> Invite people to a team, choose what they can do, and manage who belongs

Each member of a team holds one or more roles in that team. Roles are per team. Your role in one
team says nothing about your role in another team, or in your personal account. Account admins
manage members, invitations, and roles from the **Team** page in the
**[Dashboard](https://reactor.inc/account/team)**.

## Roles

| Role | Label in the dashboard | What the role allows |
| - | - | - |
| Account admin | Admin | Invite and remove members, change roles, rename the team, manage billing. |
| Developer | Developer | Use the Reactor API: create API keys and run sessions. |
| Billing admin | Billing | Buy credits and manage the payment method. Cannot manage members. |

A member can hold several roles. A person who runs sessions and also adds funds holds the developer
role and the billing admin role. An account admin who also writes code holds the account admin role
and the developer role.

> [!NOTE]
>
> The SDKs and the CLI need the developer role. An account admin without the developer role cannot
> log the CLI in to the team. Give yourself the developer role when you need both.

## Invite a member

**1. Switch to the team**

Open the account menu and select the team under **Switch account**. You need the account admin
role in that team.

**2. Send the invitation**

Open the **Team** page and click **Invite member**. Enter the email address of the person.
Select at least one role. Click **Send invite**.

**3. Wait for the person to accept**

The invitation shows under **Pending invitations** with the time left before it expires. When
the person accepts, the person moves to **Members** with the roles you selected.

The dashboard refuses an invitation in two cases. A pending invitation to that address already
exists. Or the address contains a plus tag, such as `name+tag@example.com`. Use the address the
person signs in with. A person who already belongs to the team cannot accept a second invitation.

### Expiry, resend, and revoke

An invitation expires 7 days after you send it. From **Pending invitations**, an account admin can
do two things:

* Resend the invitation. This sends a new email with a new link, and the 7 days start again. The old
  link stops working.
* Revoke the invitation. The link stops working at once. When the person already joined, a revoke
  does not remove them.

Nobody can accept an expired invitation. Resend it, or send a new one.

## What the invitee sees

The invitee gets an email from `info@reactor.inc` with a link. The next step depends on how the
invitee is signed in:

* Signed out. The page asks the invitee to sign in, or to create a Reactor account, with the email
  address of the invitation. The invitee then returns to the invitation.
* Signed in with a different email. The page tells the invitee that the invitation is for a
  different email. The invitee signs out, signs in with the invited address, and the link still
  works.
* Signed in with the invited email. The page shows the name of the team and asks the invitee to
  join.

The invited email address needs verification. When the address is not verified, the page says so.
The link keeps working after the invitee verifies the address.

When the invitee accepts, the invitee joins the team with the roles of the invitation. The dashboard
switches the invitee into the team. The personal account of the invitee does not change. Its
balance, sessions, and API keys stay where they are.

## Change the roles of a member

On the **Team** page, click **Manage roles** on the row of the member. Select the roles. A member
keeps at least one role.

## The last account admin

A team always has at least one account admin. The last account admin cannot leave the team. Nobody
can remove the last account admin. To hand over a team, give another member the account admin role
first. Then leave the team, or remove yourself.

## Remove a member

On the **Team** page, open **Member actions** on the row of the member. Select **Remove from team**
and confirm. The change applies at once:

* The member loses access to the team.
* The API keys that the member created in the team stop working.
* The team revokes its pending invitations to the email address of the member.
* The sessions, the usage, and the billing history stay with the team.

The personal account of the member does not change. You can invite the person again later. A member
can also leave the team. See [Leave a team](https://docs.reactor.inc/teams/overview.md#leave-a-team).

> [!WARNING]
>
> When you confirm the removal, the team API keys of the member stop at once. An app or a CI job
> that uses one of those keys starts to fail. When something depends on such a key, create a
> replacement key under another member first.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.