---
title: "Adopt a wallet-owned org (first-class-orgs, Phase 1.5)"
method: POST
path: "/orgs/v1/adopt"
tags: ["Org"]
---

# Adopt a wallet-owned org (first-class-orgs, Phase 1.5)

`POST /orgs/v1/adopt`

## Request

- Base URL: `https://api.run402.com`
- URL: `https://api.run402.com/orgs/v1/adopt`
- Auth: API key in header `SIGN-IN-WITH-X`

Become the OWNER of an org currently owned by your wallet's agent principal — an ownership transfer on org memberships, not a credential link. DUAL PROOF: the control-plane session (request auth) + a fresh action-bound SIWX signature from the wallet sent as the SIGN-IN-WITH-X header (carrying the challenge nonce). The wallet authenticator stays on the agent; the agent is downgraded owner→developer. If the wallet's agent owns more than one org, returns { status: 'select_org', selectable_orgs } until org_id is chosen.

## Headers

- `SIGN-IN-WITH-X` string, required

## Request body

- object
  - `org_id` string, uuid: Required only when the wallet's agent owns more than one adoptable org.
  - `display_name` string, nullable: Optional label to set on the adopted org.

## Response `200`

Adopted, or a select_org prompt for a multi-org wallet

- object
  - `status` 'adopted' | 'select_org'
  - `org_id` string, uuid
  - `display_name` string, nullable
  - `role` string
  - `already_owned` boolean
  - `selectable_orgs` object[]

## Other responses

- `401`: Missing/invalid/replayed wallet proof or challenge
- `404`: Nothing adoptable for this wallet proof (ADOPT_NOTHING_TO_ADOPT — non-revealing)
- `409`: Complex source, self-adopt, or free-org cap exceeded

---

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