initiate_project_transfer
Transfer project ownership to a wallet, email, or org. Recipient completes via accept, claim, or immediate move; owner mutations are frozen until completion.
Instructions
Initiate a project transfer (owned-org recipient shape v1.96+). Addressed to a WALLET (to_wallet, completed by accept_project_transfer), an EMAIL (to_email, completed by claim_project_transfer), OR an owned ORG (to_org_id, same-actor move that completes immediately in the first gateway release) — provide exactly one. You must currently own/admin the project; for to_org_id you must be an active owner of both the source and destination orgs. Wallet/email transfers create a pending row with 72h expiry and freeze owner-side mutations until completed, cancelled, or expired. The recipient gets the project under the migrate billing policy. Owner's tier lease is NOT refunded. GitHub repo ownership is NOT transferred. Calls POST /projects/v1/:project_id/transfers.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| message | No | Optional free-text note shown to the recipient in the preview and notification emails. | |
| to_email | No | Recipient EMAIL. Provide EXACTLY ONE of `to_wallet`, `to_email`, or `to_org_id`. An email recipient completes the transfer via `claim_project_transfer` (they claim it into an org they own). | |
| to_org_id | No | Destination ORG id. Provide EXACTLY ONE of `to_wallet`, `to_email`, or `to_org_id`. First gateway release is same-actor only: caller must be an active owner of the source org and destination org. Completes immediately and returns project keys. | |
| to_wallet | No | Recipient WALLET address (any case — the gateway lowercases). Provide EXACTLY ONE of `to_wallet`, `to_email`, or `to_org_id`. A wallet recipient completes the transfer via `accept_project_transfer`. | |
| project_id | Yes | Project id to transfer. You must currently own or admin it (the gateway verifies against fresh DB state). | |
| billing_policy | No | Wallet rail only. Phase 1A supports only `migrate` (default). The project moves into the recipient's organization. | |
| kysigned_record_id | No | Wallet rail only. Optional KySigned record id. Phase 1A stores this verbatim (no verification). | |
| retain_collaborator_role | No | Email rail only (v1.91): keep a `developer` membership in the recipient's org after the transfer completes. The recipient must accept it at claim time (`accept_retained_collaborator`). Omit for a full severance. |