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

# Invite a team member

> Invite a new member to a team. Sends an email with the accept link.

Invite a new member to a team. The invite is created with `status: pending` and a transactional email is sent. Recipients accept via [POST /api/teams/\[id\]/accept](/api-reference/teams/accept-invite).

```bash theme={null}
curl -X POST https://app.dacard.ai/api/teams/tm_2x1B3y/invite \
  -H "Authorization: Bearer $DACARD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "email": "designer@acme.com",
    "role": "scorer",
    "functionScope": "design"
  }'
```

| Property           | Value                            |
| ------------------ | -------------------------------- |
| **Auth**           | Required                         |
| **Required scope** | Caller must be a team `admin`    |
| **Plan limit**     | 10 members per team max          |
| **Idempotent**     | No (sends a new email each time) |

## Body

| Field           | Type                                                                               | Required | Notes                                               |
| --------------- | ---------------------------------------------------------------------------------- | -------- | --------------------------------------------------- |
| `email`         | string                                                                             | yes      | The invitee's email.                                |
| `role`          | `admin` \| `scorer` \| `viewer`                                                    | no       | Defaults to `scorer`.                               |
| `functionScope` | `strategy` \| `design` \| `development` \| `intelligence` \| `operations` \| `gtm` | no       | Narrows the dimensions this member sees and scores. |

## Response

`201 Created`

```json theme={null}
{
  "member": {
    "id": "tmm_...",
    "teamId": "tm_2x1B3y",
    "email": "designer@acme.com",
    "role": "scorer",
    "functionScope": "design",
    "status": "pending"
  }
}
```

## Errors

| Status | Code                                  | When                        |
| ------ | ------------------------------------- | --------------------------- |
| 400    | `email is required`                   | Body missing email.         |
| 400    | `Invalid function scope`              | Bad `functionScope`.        |
| 401    | `AUTH_REQUIRED`                       | No session.                 |
| 403    | `Only team admins can invite members` | Caller is not admin.        |
| 409    | `Team is at the 10-member limit`      | Roster full.                |
| 409    | `That email is already on the team`   | Duplicate invite.           |
| 500    | `INTERNAL_ERROR`                      | Write or email send failed. |

Side effects: audit log `team_member_invited`, PQL event `team_invite_sent`, transactional email via Resend.
