Prerequisites
- Access in both organizations:
websites.transfercapability on the source website and website-creation rights in the target — see Access control - The target organization’s id, from
GET /v1/organizations - For a website with custom domains enabled: active billing and unused paid capacity in the target — see Plans and limits
An API key carries access in a single organization, so it cannot pass the target-side check. Run transfers as a person who belongs to both organizations — from the dashboard, or a session on the app host.
1
Check the target's capacity
Skip this step for a website with custom domains disabled. A website using only its Cactal platform domain never counts toward a plan, even when published. For a website with custom domains enabled, the target organization must have active billing and unused paid capacity, or the transfer is rejected. Capacity normally matches the sites in use, so the practical path is often to disable custom domains, transfer, and have an owner in the target organization re-enable them, confirming the charge there. After a transfer out, the source organization’s freed capacity is released automatically.Confirm
Check the target's billing state
"status": "active" and compare billableSiteCapacity against billableSiteCount. Capacity must exceed the count to receive the site.2
Transfer the website
POST /v1/websites/{websiteId}/transfer performs the move atomically.organizationId. The website id never changes. Transferring to the website’s current organization returns 400.3
Understand what moved
Everything owned by the website travels with it, because it is keyed by the website id:
One thing is removed on purpose: every website-scoped access grant on the website is deleted during the transfer.
4
Restore access in the target organization
Members of the target organization now see the website through their organization roles; the source organization loses all visibility. Rebuild any per-website access:Re-invite website editors with
Re-create a client key in the target organization
POST /v1/websites/{websiteId}/editors — see Invite teammates and clients. The transfer itself is recorded in the target organization’s audit log with the source and target organization ids.5
Verify the transfer
Confirm the new owner organization
You should see
"organizationId": "oTgt4rS6tU8vW0xY1zA3b", and the website appears in GET /v1/websites?organizationId=oTgt4rS6tU8vW0xY1zA3b. If it was published, its hosts still serve — request the platform subdomain to confirm.Troubleshooting
Next steps
- Manage API keys to rebuild scoped keys in the target organization
- Invite teammates and clients to restore editor access
- Websites concepts for the full website lifecycle