Skip to content
WP Engine Documentation

Initiate a site transfer

POST
/sites/{site_id}/site_transfers
curl --request POST \
--url https://api.wpengineapi.com/v1/sites/example/site_transfers \
--header 'Authorization: Basic <credentials>' \
--header 'Content-Type: application/json' \
--data '{ "destination_account_id": "eeda3227-9a39-46ae-9e14-20958bb4e6c9", "scheduled_time": "2026-06-01T14:30:00Z", "maintenance_mode": false }'

Description

Requests a transfer of the given site to a destination account. The transfer is accepted asynchronously and will initially have a pending or scheduled status.

Requires Owner or Full with Billing access on both the origin and destination accounts.

Constraints
  • Origin and destination accounts must be different
  • Sandbox sites cannot be transferred
  • The destination account must have a preferred Data Center configured
  • If scheduled_time is provided, it must be an RFC 3339 datetime between 1 hour and 7 days in the future
site_id
required
string format: uuid

ID of the site to transfer

Properties
  • destination_account_id (required) — UUID of the account to transfer the site to
  • scheduled_time (optional) — RFC 3339 datetime at which the transfer should be executed (must be between 1 hour and 7 days in the future). Omit to transfer immediately.
  • maintenance_mode (optional) — Whether to enable maintenance mode during the transfer. Defaults to false.
Media type application/json
object
destination_account_id
required

UUID of the destination account

string format: uuid
Example
eeda3227-9a39-46ae-9e14-20958bb4e6c9
scheduled_time

RFC 3339 datetime at which to execute the transfer. Must be between 1 hour and 7 days in the future. Example: ‘2026-06-01T14:30:00Z’

string format: date-time
Example
2026-06-01T14:30:00Z
maintenance_mode

Whether to enable maintenance mode on the site during the transfer

boolean
Example
false

Transfer accepted

Media type application/json
object
id
required

Unique identifier for the site transfer

string format: uuid
site
required

Name of the site being transferred (as it was at time of transfer)

string
installs
required

Names of the installs associated with the site at time of transfer

Array<string>
origin_account
required

Name of the account the site is transferring from

string
destination_account
required

Name of the account the site is transferring to

string
status
required

Current status of the transfer

string
Allowed values: pending scheduled in_progress completed failed cancelled
scheduled_time

The time at which the transfer is scheduled to execute. Null for immediate transfers.

string format: date-time
created_at
required

Timestamp when the transfer was created

string format: date-time
updated_at
required

Timestamp when the transfer was last updated

string format: date-time
Example
{
"id": "7c3e1a2b-4f5d-4e6c-b7a8-d9e0f1a2b3c4",
"site": "my-wordpress-site",
"installs": [
"mysite",
"mysitestg"
],
"origin_account": "Acme Corp",
"destination_account": "New Owner Inc",
"status": "pending",
"scheduled_time": "2026-06-01T14:30:00Z",
"created_at": "2026-05-15T10:00:00Z",
"updated_at": "2026-05-15T10:05:00Z"
}

Bad Request

Media type application/json
object
message
required

A message regarding the error that occurred on the server

string
documentation_url

(Optional) A URL where documentation regarding this specific error can be found

string
errors

An array of error objects describing specific errors that arose when servicing the request

Array<object>
object
resource
required

The name of the resource that was being processed when the error occurred

string
field
required

(Optional) The specific field associated with the error

string
type
required

(Optional) A type associated with the error. invalid_value, access_error, value_unavailable

string
code
required

(Optional) A machine code relating to the error that occurred with the field and resource

string
message
required

(Optional) A human-readable message relating to the error that occurred with the field and resource

string
Example
{
"message": "Invalid Site: Name cannot be empty.",
"errors": [
{
"resource": "Site",
"field": "name",
"type": "invalid_value",
"code": "too_long",
"message": "Name is too long (maximum is 40 characters)"
}
]
}

Authentication Error

Media type application/json
object
message
required

A message regarding the error that occurred on the server

string
documentation_url

(Optional) A URL where documentation regarding this specific error can be found

string
Example
{
"message": "Bad Credentials"
}

Not authorized

Media type application/json
object
message
required

A message regarding the error that occurred on the server

string
documentation_url

(Optional) A URL where documentation regarding this specific error can be found

string
Example
{
"message": "You don't have permission to perform that action"
}

Not found

Media type application/json
object
message
required

A message regarding the error that occurred on the server

string
documentation_url

(Optional) A URL where documentation regarding this specific error can be found

string
Example
{
"message": "Not Found"
}

Conflict — e.g. site already has an active transfer, site is not in a transferable state, or destination account is not eligible.

Media type application/json
object
message
required

A message regarding the conflict that occurred

string
documentation_url

(Optional) A URL where documentation regarding this specific error can be found

string
Example
{
"message": "Transfer has already started and cannot be cancelled"
}

Unprocessable Entity — e.g. validation failed on transfer parameters

Media type application/json
object
message
required

A message regarding the unprocessable entity that occurred

string
documentation_url

(Optional) A URL where documentation regarding this specific error can be found

string
errors

An array of error objects describing specific errors that arose when servicing the request

Array<object>
object
resource
required

The name of the resource that was being processed when the error occurred

string
field
required

(Optional) The specific field associated with the error

string
type
required

(Optional) A type associated with the error. invalid_value, access_error, value_unavailable

string
code
required

(Optional) A machine code relating to the error that occurred with the field and resource

string
message
required

(Optional) A human-readable message relating to the error that occurred with the field and resource

string
Example
{
"message": "Validation failed on transfer parameters",
"errors": [
{
"resource": "Site",
"field": "name",
"type": "invalid_value",
"code": "too_long",
"message": "Name is too long (maximum is 40 characters)"
}
]
}

Too many requests

Media type application/json

Internal Server Error

Media type application/json
object
message
required

A message regarding the error that occurred on the server

string
Example
{
"message": "An unexpected error occurred, please try again in a few minutes"
}

Service unavailable

Media type application/json