Accept ownership of an organization
The ownership_transfers.accept operation: POST /api/v1/ownership_transfers/accept in the REST API and the ownership_transfers_accept tool in the MCP server.
/api/v1/ownership_transfers/acceptAccepts the offer of ownership an owner made to you: you become an owner of the whole organization
(org_owner), and the owner who offered it becomes an admin. You must be signed in as the member the offer is
for, with a sign-in in the last 15 minutes; the offer must still be open (7 days).
Who can call it: the signed-in member the offer is addressed to.
At a glance
- REST:
POST /api/v1/ownership_transfers/accept - MCP tool:
ownership_transfers_accept - Operation ID:
ownership_transfers.accept - Scope: Platform
- Permission:
account:write - Risk tier:
security - Dry run: Supported (send
Ownrecord-Dry-Run: true) - Idempotency:
Idempotency-Keyrequired - Modes: Test and live
- Authentication: API key with the
account:writescope - 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 |
|---|---|---|---|
orgId | org_… ID | Yes |
Response
200 OK with a JSON object:
| Field | Type | Description |
|---|---|---|
organization | object | |
organization.id | org_… ID | |
organization.slug | string | |
organization.name | string | |
membership | object | Your organization-wide owner membership. |
membership.id | mem_… ID | |
membership.object | "membership" | |
membership.orgId | org_… ID | |
membership.userId | usr_… ID | |
membership.role | one of org_owner, org_admin, billing_admin, finance, tax_manager, support, developer, viewer | |
membership.scope | object | |
membership.livemodeAccess | boolean | |
membership.invitedBy | usr_… ID or null | |
membership.user | object or null | |
membership.createdAt | date-time | |
membership.updatedAt | date-time | |
previousOwnerMembership | object or null | The membership of the owner who offered it, now org_admin. |
Examples
Accept the offer
POST /api/v1/ownership_transfers/accept
Authorization: Bearer or_test_…
Idempotency-Key: 3f1c9a52-7d0e-4b8f-9a61-0c2d5e8b7f14
Content-Type: application/json
{
"orgId": "org_01m4tx5nj7ekd958x53w4bntcg"
}
Response (200):
{
"organization": {
"id": "org_01m4tx5nj7ekd958x53w4bntcg",
"slug": "acme",
"name": "Acme"
},
"membership": {
"id": "mem_01m4tx5nj8emwbyf7y9vcf47x6",
"object": "membership",
"orgId": "org_01m4tx5nj7ekd958x53w4bntcg",
"userId": "usr_01m4tx5nj8emwbyf7y9vcf47xb",
"role": "org_owner",
"scope": {
"type": "brand",
"brandId": "brd_01m4tx5nj8emwbyf7y9vcf47x4"
},
"livemodeAccess": false,
"invitedBy": "usr_01m4tx5nj8emwbyf7y9vcf47xa",
"user": {
"email": "dev@acme.example",
"name": "Dana Developer"
},
"createdAt": "2026-10-13T12:00:00.000Z",
"updatedAt": "2026-10-13T12:00:00.000Z"
},
"previousOwnerMembership": {
"id": "mem_01m4tx5nj8emwbyf7y9vcf47x6",
"object": "membership",
"orgId": "org_01m4tx5nj7ekd958x53w4bntcg",
"userId": "usr_01m4tx5nj8emwbyf7y9vcf47xb",
"role": "org_admin",
"scope": {
"type": "brand",
"brandId": "brd_01m4tx5nj8emwbyf7y9vcf47x4"
},
"livemodeAccess": false,
"invitedBy": "usr_01m4tx5nj8emwbyf7y9vcf47xa",
"user": {
"email": "dev@acme.example",
"name": "Dana Developer"
},
"createdAt": "2026-10-13T12:00:00.000Z",
"updatedAt": "2026-10-13T12:00:00.000Z"
}
}
Errors
| Code | HTTP status | When | What to do |
|---|---|---|---|
ownership_transfer_not_found | 404 | No open offer of this organization is addressed to you. | Offers expire after 7 days. Ask an owner to offer ownership again. |
owner_required | 403 | The caller isn't a signed-in person. | Ask an organization owner (org_owner). |
version_conflict | 409 | The offer or a membership changed at the same time; try again. | Fetch the object again and retry the change. |
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 | The caller isn't a signed-in user. | 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, rate_limited, internal_error.