# Give a teammate access

URL: /agents/give-a-teammate-access · Id: `guide:give-a-teammate-access`

> Invite a cofounder or teammate by email with an Access Level, owner, admin, member or viewer, that sets what they may open and change.

Say `Invite sam@leaseline.app as Engineering Lead with admin access`. You approve the invitation, your teammate gets an email, signs in at startups.studio, and holds one [Access Level](/business/nouns/access-level) in the app.

| Access Level | They may | Give it to |
| --- | --- | --- |
| Owner | Call everything, one-way calls such as payouts included | Only you: your sign-in owns the [Startup](/business/nouns/startup), and no invitation grants it |
| Admin | Read everything and make every two-way change, access included | A cofounder running part of the business |
| Member | Read everything and change records, but not who may do what | A contractor answering support |
| Viewer | Read everything and change nothing | Someone who only needs to see the numbers |

Needs: [Role](/business/nouns/role)

**Before it runs**

- Who says yes: You. Your agent shows you the run and waits for your [Approval](/business/nouns/approval).
- You leave the chat: Never: it all happens in the chat.

## What you get
- 1 invitation to their email, to sign in at startups.studio (Human)
- 1 admin access: read everything and make every two-way change, access included (Access Level)
- 1 one-way calls, such as dissolving the company, kept with you as owner (Access Level)
- 1 seat they share with its agent, so their work has an owner (Role)

## Your agent does
**For agents**

- Guide: `guide:give-a-teammate-access`, status `live`. Page: [/agents/give-a-teammate-access.md](/agents/give-a-teammate-access.md).
- Approval: ask the founder first. Show the run, then wait for their Approval; a refusal ends it.
- Leaves the chat: never.
- Needs first: [Role](/business/nouns/role).
- Run: call the steps in order, each through the API, SDK, CLI or MCP tab below; a later step passes the `$id` an earlier one returns. Each value marked example is the sample business’s: pass the founder’s own.

| Step | Verb | Inputs (type, required, this guide’s value) | Returns |
| --- | --- | --- | --- |
| 1 | [`Human.invite`](/business/nouns/human/invite) (`verb:Human.invite`) | `email` email, required: example `"sam@leaseline.app"`; `role` Role (an id), required: example `"engineering-lead"`; `access` string: example `"admin"` | `human` Human |

Returns: the last call answers with `human` and its `action`, whose `status` is `done`, `pending` (waiting on an Approval or a Worker), `failed`, `canceled` or `refused`:

```json
{
  "api": "https://api.sb/leaseline.app",
  "human": {
    "$id": "https://api.sb/leaseline.app/humans/human_1",
    "$type": "Human",
    "email": "sam@leaseline.app"
  },
  "action": {
    "$id": "https://api.sb/leaseline.app/actions/action_1",
    "operation": "Human.invite",
    "status": "done"
  },
  "links": {
    "self": "https://api.sb/leaseline.app/actions/action_1"
  }
}
```

Next: offer “Invite Sam to the Product Lead seat instead”, or “Invite my contractor to the Customer Lead seat as a member”.

Calls: `Human.invite`

Ask:

```text
Give my cofounder access.
Give Sam admin access.
Let my cofounder in.
```

API:

```bash
# Human.invite
curl -X POST https://api.sb/leaseline.app/humans/invite \
  -H "Authorization: Bearer $STARTUP_BUILDER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"email":"sam@leaseline.app","role":"engineering-lead","access":"admin"}'
```

SDK:

```ts
import { $ } from 'startup-builder'

await $.Human.invite({ email: 'sam@leaseline.app', role: 'engineering-lead', access: 'admin' })
```

CLI:

```bash
npx startup-builder do Human.invite --json '{"email":"sam@leaseline.app","role":"engineering-lead","access":"admin"}'
```

MCP:

```json
{
  "name": "do",
  "arguments": {
    "code": "return await $.Human.invite({ email: 'sam@leaseline.app', role: 'engineering-lead', access: 'admin' })"
  }
}
```

## Change it
- Invite Sam to the Product Lead seat instead.
- Invite my contractor to the Customer Lead seat as a member.
- Let Sam approve deploys instead of me.

## Under the hood
- Systems: [Workforce](/systems/workforce)
- Nouns: [Human](/business/nouns/human), [Worker](/business/nouns/worker), [Access Level](/business/nouns/access-level), [Permission](/business/nouns/permission), [Role](/business/nouns/role)
- Events: [`Human.invited`](/business/events/Human.invited)

Every invitation also seats the person in a [Role](/business/nouns/role), shared with its [Agent](/business/nouns/agent). The Role says what work is theirs; the Access Level says what they may reach, and never widens what the seat may call. [Access levels](/agents/access-levels) explains the split.