---
title: "Commit an attributed staff member merge"
method: POST
path: "/v1/admin/cockpit/teams/{tenant_id}/member-merges"
tags: ["admin"]
---

# Commit an attributed staff member merge

`POST /v1/admin/cockpit/teams/{tenant_id}/member-merges`

## Request

- Base URL: `https://api.patricia.app` (the document declares no server; this is the origin it was published from)
- URL: `https://api.patricia.app/v1/admin/cockpit/teams/{tenant_id}/member-merges`
- Auth: HTTP bearer

Merge two members and write both staff audit records in one transaction.

## Path parameters

- `tenant_id` string, uuid, required

## Request body

- AdminMemberMergeRequest: Two tenant-bound members and the staff operator's reason.
  - `surviving_membership_id` string, uuid, required: The member who remains active.
  - `retiring_membership_id` string, uuid, required: The duplicate member that becomes inactive.
  - `reason` string, required

## Response `201`

Successful Response

- AdminMemberMergeResult: The attributed merge record and its carry totals.
  - `merge_id` string, uuid, required
  - `surviving_membership_id` string, uuid, required
  - `retiring_membership_id` string, uuid, required
  - `evidence_code` string, required
  - `rows_moved` integer, required
  - `emails_gained` string[]

## Other responses

- `401`: Unauthorized
- `403`: Permission denied (PERMISSION_DENIED) or email not verified (EMAIL_NOT_VERIFIED)
- `404`: Not found
- `409`: Conflict: inspect ``errors[0].type`` for the specific case (``last_owner``, ``value_error``)
- `422`: Validation error

---

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