Offer ownership to another member
The ownership_transfers.create operation: POST /api/v1/ownership_transfers in the REST API and the ownership_transfers_create tool in the MCP server.
/api/v1/ownership_transfersAn owner offers ownership of the organization to another member. The member is emailed and has 7 days to
accept (ownership_transfers.accept, with their own recent sign-in). When they accept, they become an owner
and you become an admin (org_admin), so the organization keeps the same number of owners. Until then
nothing changes, and you can withdraw the offer (ownership_transfers.cancel). One offer is open at a time.
Only an owner can offer ownership, from the console, with a sign-in in the last 15 minutes.
At a glance
- REST:
POST /api/v1/ownership_transfers - MCP tool:
ownership_transfers_create - Operation ID:
ownership_transfers.create - Scope: Organization
- Permission:
org:admin - Risk tier:
security - Dry run: Supported (send
Ownrecord-Dry-Run: true) - Idempotency:
Idempotency-Keyrequired - Modes: Test and live
- Authentication: API key with the
org:adminscope - Fresh sign-in: In the console, a sign-in within the last 15 minutes
- Since: M12
Request
Body
A JSON object (Content-Type: application/json):
| Field | Type | Required | Description |
|---|---|---|---|
toUserId | usr_… ID | Yes | The member who would become the owner. |
Response
201 Created with a JSON object:
| Field | Type | Description |
|---|---|---|
object | "ownership_transfer" | |
orgId | org_… ID | |
fromUserId | usr_… ID | |
toUserId | usr_… ID | |
toEmail | string or null | |
status | one of pending | |
createdAt | date-time | |
expiresAt | date-time |
Examples
Offer ownership to an admin
POST /api/v1/ownership_transfers
Authorization: Bearer or_test_…
Idempotency-Key: 3f1c9a52-7d0e-4b8f-9a61-0c2d5e8b7f14
Content-Type: application/json
{
"toUserId": "usr_01m4tx5nj8emwbyf7y9vcf47xb"
}
Response (201):
{
"object": "ownership_transfer",
"orgId": "org_01m4tx5nj7ekd958x53w4bntcg",
"fromUserId": "usr_01m4tx5nj8emwbyf7y9vcf47xa",
"toUserId": "usr_01m4tx5nj8emwbyf7y9vcf47xb",
"toEmail": "ana@acme.example",
"status": "pending",
"createdAt": "2026-10-26T09:00:00.000Z",
"expiresAt": "2026-11-02T09:00:00.000Z"
}
Errors
| Code | HTTP status | When | What to do |
|---|---|---|---|
owner_required | 403 | You aren't an owner of the organization (or you aren't a person). | Ask an organization owner (org_owner). |
ownership_transfer_not_allowed | 409 | The person isn't a member, is an owner already, or is you (details.problem). | Offer ownership to another member of the organization who isn't an owner yet. |
ownership_transfer_exists | 409 | An offer is open already; cancel it first. | Cancel the open offer first (ownership_transfers.cancel), then make a new one. |
fresh_auth_required | 403 | Your last sign-in is older than 15 minutes. | Sign in again, then repeat the action within 15 minutes. |
permission_denied | 403 | You can't manage this organization. | Ask an organization owner or admin for a role or scope that allows this action. |
It can also return these common errors: validation_failed, api_version_unsupported, invalid_json, unsupported_media_type, authentication_required, api_key_invalid, resource_not_found, idempotency_key_required, idempotency_key_reused, idempotency_in_progress, approval_required, approval_rejected, approval_expired, stale_approval, approval_policy_denied, rate_limited, internal_error.