Skip to main content
A transfer moves a website — with its full history, content, and domains — from one organization to another in a single call.

Prerequisites

  • Access in both organizations: websites.transfer capability 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.
Check the target's billing state
Confirm "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.
The response is the website with its new 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.
Website-scoped editors lose access at transfer time, and website-scoped API keys lose their grant on this website. A key whose only grant was this website stops authorizing anything. Re-invite editors and re-scope or re-issue keys in the target organization.
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-create a client key in the target organization
Re-invite website editors with 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