---
search:
  tags:
    - TeamMembers
    - POST
seo:
  description: >-
    User-gated (chrm_user_* or session); caller must be a team owner/admin,…
    Reference for the POST /api/v1/teams/{teamId}/members endpoint in the
    Charming API.
sidebar:
  label: Add a member to a team
  badge: POST
title: Add a member to a team
type: openapi-operation
---
User-gated (`chrm_user_*` or session); caller must be a team owner/admin, and only an owner may grant the `owner` role. The grantee (handle or email) must already hold a Charming account.

`POST /api/v1/teams/{teamId}/members`

**Request body** (`application/json`, required)

- `grantee` (string, required) — Handle or email of the new member.
- `role` (string)

Request body example:

```json
{
  "grantee": "string",
  "role": "owner"
}
```

**Responses**

- `201` — Member added.
- `400` — Invalid body or role.
- `401` — Sign-in required.
- `403` — Caller may not add members (or may not grant owner).
- `404` — No Charming account for the grantee.
- `409` — Already a member.

Response example, 201:

```json
{
  "ok": true,
  "userId": "string",
  "role": "owner"
}
```

Found a bug or need a feature? [Tell us](/docs/capabilities/feedback) with `submit_feedback` or `POST /app/{id}/feedback`. Your feedback shapes what we build next.
