---
title: "Add an organization member"
method: POST
path: "/orgs/{identifier}/members"
tags: ["My Organizations"]
---

# Add an organization member

`POST /orgs/{identifier}/members`

Adds a user to the organization with the ADMIN or MEMBER role. The caller (key owner) must be an organization admin or owner. Role ceilings and cascades are enforced exactly as in the web app. Requires orgs.roster:read-write and API writes access. Supports an optional `Idempotency-Key` header for safe retries.

## Path parameters

- `identifier` string, required — Organization slug or Convex organization ID.

## Request body

- AddOrgMemberBody — Add a member to the organization.
  - `targetUserId` string, required — Convex user ID of the member to add.
  - `role` 'ADMIN' | 'MEMBER', required — The role to assign to the new member. Ownership is set on creation.

## Response `200`

The member was added.

- AddOrgMemberResponse
  - `success` true, required
  - `timestamp` string, required — Response generation time (ISO 8601).

## Other responses

- `400` — Bad request (invalid body, cursor, limit, or date).
- `401` — Missing or invalid API key.
- `403` — API key lacks the required permission.
- `404` — Resource not found.
- `409` — Conflict.
- `429` — Rate limited.
- `500` — Internal server error.

---

[API](https://skmtc.net/teambattles/apis/teambattles-api.md) · [All operations](https://skmtc.net/teambattles/apis/teambattles-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/teambattles/teambattles-api/versions/2ffe8fb53b7d/schema)
