---
title: "Transfer team ownership"
method: POST
path: "/teams/{key}/transfer"
tags: ["Team Members"]
---

# Transfer team ownership

`POST /teams/{key}/transfer`

Make an active team member the sole owner. Team key can be ID or slug. A current team owner or tenant administrator can perform this action. The new owner receives the team Admin role, while previous owners keep their existing access and lose only isOwner status.

## Path parameters

- `key` string, required — Team identifier (ID or slug)

## Request body

- object
  - `newOwnerId` string, required — Team member ID of the new owner. This member must already exist with ACTIVE status.

## Response `200`

OK

- object — Response payload for team ownership transfer operation
  - `previousOwner` object, required — Primary previous owner retained for compatibility. This member keeps their existing access and loses isOwner status. On an idempotent retry after the transfer is already applied, this is the unchanged current owner.
    - `id` string, required — Unique identifier for the team member
    - `createdAt` string, date-time, required — Timestamp in ISO 8601 format when the member was created
    - `updatedAt` string, date-time, required — Timestamp in ISO 8601 format when the member was last updated
    - `teamId` string, required — Team this member belongs to
    - `userId` string, required — User ID of the team member
    - `user` object, required — Denormalized user details for quick access without additional queries.
      - `id` string, required — Unique identifier of the user
      - `email` string, email, required — Email address of the user
      - `firstName` string, required — First name of the user
      - `lastName` string, required — Last name of the user
      - `imageUrl` string — Profile image URL of the user
    - `permissions` string[] — Base permissions across the team. Can be overridden per promoter or venue. Undefined means no base permissions (permissions come from PermissionScope only).
    - `roleIds` string[] — Role IDs assigned to this team member. Effective permissions are derived from role nodes plus explicit permission nodes.
    - `isOwner` boolean, required — Whether this member is the owner of the team. Only one owner per team is allowed. Owner has full control and cannot be deleted.
    - `access` object — Promoter access summary. Omitted only for legacy/no-access records.
      - `promoterIds` string[], nullable, required — Null means team-wide promoter access. An array means access is restricted to those promoters.
    - `tenantId` string, required — Tenant ID for multi-tenant isolation
  - `newOwner` object, required — The new owner (now has isOwner: true)
    - `id` string, required — Unique identifier for the team member
    - `createdAt` string, date-time, required — Timestamp in ISO 8601 format when the member was created
    - `updatedAt` string, date-time, required — Timestamp in ISO 8601 format when the member was last updated
    - `teamId` string, required — Team this member belongs to
    - `userId` string, required — User ID of the team member
    - `user` object, required — Denormalized user details for quick access without additional queries.
      - `id` string, required — Unique identifier of the user
      - `email` string, email, required — Email address of the user
      - `firstName` string, required — First name of the user
      - `lastName` string, required — Last name of the user
      - `imageUrl` string — Profile image URL of the user
    - `permissions` string[] — Base permissions across the team. Can be overridden per promoter or venue. Undefined means no base permissions (permissions come from PermissionScope only).
    - `roleIds` string[] — Role IDs assigned to this team member. Effective permissions are derived from role nodes plus explicit permission nodes.
    - `isOwner` boolean, required — Whether this member is the owner of the team. Only one owner per team is allowed. Owner has full control and cannot be deleted.
    - `access` object — Promoter access summary. Omitted only for legacy/no-access records.
      - `promoterIds` string[], nullable, required — Null means team-wide promoter access. An array means access is restricted to those promoters.
    - `tenantId` string, required — Tenant ID for multi-tenant isolation
  - `demotedOwners` object[], required — All previous owners whose isOwner status was cleared by the transfer.
    - `id` string, required — Unique identifier for the team member
    - `createdAt` string, date-time, required — Timestamp in ISO 8601 format when the member was created
    - `updatedAt` string, date-time, required — Timestamp in ISO 8601 format when the member was last updated
    - `teamId` string, required — Team this member belongs to
    - `userId` string, required — User ID of the team member
    - `user` object, required — Denormalized user details for quick access without additional queries.
      - `id` string, required — Unique identifier of the user
      - `email` string, email, required — Email address of the user
      - `firstName` string, required — First name of the user
      - `lastName` string, required — Last name of the user
      - `imageUrl` string — Profile image URL of the user
    - `permissions` string[] — Base permissions across the team. Can be overridden per promoter or venue. Undefined means no base permissions (permissions come from PermissionScope only).
    - `roleIds` string[] — Role IDs assigned to this team member. Effective permissions are derived from role nodes plus explicit permission nodes.
    - `isOwner` boolean, required — Whether this member is the owner of the team. Only one owner per team is allowed. Owner has full control and cannot be deleted.
    - `access` object — Promoter access summary. Omitted only for legacy/no-access records.
      - `promoterIds` string[], nullable, required — Null means team-wide promoter access. An array means access is restricted to those promoters.
    - `tenantId` string, required — Tenant ID for multi-tenant isolation

## Other responses

- `400` — 400
- `401` — 401
- `403` — 403
- `404` — 404
- `409` — 409
- `412` — 412
- `422` — 422
- `429` — 429
- `500` — 500
- `501` — 501
- `503` — 503

---

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