---
title: "Add a new team member to an organization. Reuses an existing Metricool account for the given email when one already exists, or creates a new shell account for it, then sends an invitation email. Only the organization owner or a delegated team member with the manageTeamMembers permission may call this."
method: POST
path: "/v2/organizations/{organizationId}/team-members"
tags: ["Organization Team Members Api Service"]
---

# Add a new team member to an organization. Reuses an existing Metricool account for the given email when one already exists, or creates a new shell account for it, then sends an invitation email. Only the organization owner or a delegated team member with the manageTeamMembers permission may call this.

`POST /v2/organizations/{organizationId}/team-members`

## Request

- Base URL: `https://app.metricool.com/api`
- URL: `https://app.metricool.com/api/v2/organizations/{organizationId}/team-members`
- Auth: none declared

## Path parameters

- `organizationId` integer, required

## Request body

- AddOrganizationTeamMemberRequest: Request body to add a new team member to an organization.
  - `email` string, required: Email of the user to invite as a team member.
  - `roleId` integer, required: Id of the role to assign to the new team member. Must belong to the organization owner.

## Response `200`

Team member added.

- JsonOkResponseOrganizationTeamMemberDto
  - `metadata` object
  - `page` JsonPaging
    - `next` string
  - `data` OrganizationTeamMemberDto: A team member of an organization.
    - `id` integer: Id of this team member row.
    - `userId` integer: Metricool user id of the team member.
    - `email` string: Email of the team member.
    - `fullName` string, nullable: First and last name of the team member's account, as collaborators carry it. Null when the account has no name: the front then shows the email.
    - `profilePicture` string, nullable: URL of the team member's profile picture. Null when they have none, and the front shows their initials instead.
    - `roleId` integer: Id of the role assigned to this team member.
    - `enabled` boolean: Whether this team member ROW (the organization membership) is currently active, not whether the underlying Metricool account is enabled. Always true: every read query already filters on enabled = 1, so a removed team member never shows up here with false instead.
    - `lastInvitationSent` DateTimeInfo
      - `dateTime` string, required: Local Date-time represented with a certain timezone
      - `timezone` string: Timezone applied to the datetime
    - `createdAt` DateTimeInfo
      - `dateTime` string, required: Local Date-time represented with a certain timezone
      - `timezone` string: Timezone applied to the datetime

## Other responses

- `400`: Invalid request body, the target is already a team member or the organization's own owner, or roleId is neither a system role nor one of the organization owner's own.
- `403`: Caller is not a regular-user session, the organization permissions feature is disabled for the organization's owner, the organization's owner's plan does not qualify for an organization, or the caller cannot manage team members of this organization.
- `404`: Organization not found, or its owner account could no longer be resolved.

---

[API](https://skmtc.dev/metricool/apis/metricool-api.md) · [All operations](https://skmtc.dev/metricool/apis/metricool-api/llms.txt) · [OpenAPI document](https://skmtc.dev/metricool/apis/metricool-api/revisions/aea9d9a8415a?raw)
