Add multiple domains and redirects to an existing install
package main
import ( "fmt" "strings" "net/http" "io")
func main() {
url := "https://api.wpengineapi.com/v1/installs/example/domains/bulk"
payload := strings.NewReader("{ \"domains\": [ { \"name\": \"example.com\" }, { \"name\": \"www.example.com\", \"redirect_to\": \"example.com\" } ] }")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Basic <credentials>") req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close() body, _ := io.ReadAll(res.Body)
fmt.Println(res) fmt.Println(string(body))
}const url = 'https://api.wpengineapi.com/v1/installs/example/domains/bulk';const options = { method: 'POST', headers: {Authorization: 'Basic <credentials>', 'Content-Type': 'application/json'}, body: '{"domains":[{"name":"example.com"},{"name":"www.example.com","redirect_to":"example.com"}]}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request POST \ --url https://api.wpengineapi.com/v1/installs/example/domains/bulk \ --header 'Authorization: Basic <credentials>' \ --header 'Content-Type: application/json' \ --data '{ "domains": [ { "name": "example.com" }, { "name": "www.example.com", "redirect_to": "example.com" } ] }'Adds multiple domains and redirects to a specific install
Authorizations
Section titled “Authorizations ”Parameters
Section titled “ Parameters ”Path Parameters
Section titled “Path Parameters ”ID of install
Request Body
Section titled “Request Body ”Properties
- domains - required - array of domains to be created, min size: 1, max size: 20
- items:
- name - required - The name of the new domain (or redirect)
- redirect_to - optional - Name of the domain to set redirect to
- items:
object
object
Example
{ "domains": [ { "name": "example.com" }, { "name": "www.example.com", "redirect_to": "example.com" } ]}Responses
Section titled “ Responses ”Created
Domains will be created, but not serving traffic unless it is verified. Verification status is
provided in the ownership_status field:
- TXT_VERIFIED indicates the domain ownership has been verified.
- TXT_VERIFICATION_PENDING indicates the domain ownership still requires verification using TXT record.
NOTE: To verify the domain, a DNS TXT record must be added to your domain registry using the txt_verification_key
and txt_verification_value fields provided on the newly created domain. After the TXT record is in place, POST to
/installs/{install_id}/domains/{domain_id}/verification to complete verification.
object
object
The time when the TXT record was verified
The domain that the TXT record was verified for
The TXT record verification key. Null if the domain is already verified.
The TXT record verification value. Null if the domain is already verified.
Ownership verification status of the domain.
- TXT_VERIFIED indicates the domain ownership has been verified.
- TXT_VERIFICATION_PENDING indicates the domain ownership still requires verification using TXT record.
NOTE: To verify the domain, a DNS TXT record must be added to your domain registry using the txt_verification_key
and txt_verification_value fields provided with the domain. After the TXT record is in place, POST to
/installs/{install_id}/domains/{domain_id}/verification to complete verification.
Example
{ "id": "e41fa98f-ea80-4654-b229-a9b765d0863a", "name": "example.com", "duplicate": false, "primary": true, "redirects_to": { "id": "e41fa98f-ea80-4006-b229-a9b765d0863a", "name": "redirect.com" }, "txt_verified_time": "2026-04-20T16:00:00.007Z", "txt_verified_domain": "example.com", "txt_verification_key": "_wpe_verification", "ownership_status": "TXT_VERIFIED"}Bad Request
object
A message regarding the error that occurred on the server
(Optional) A URL where documentation regarding this specific error can be found
An array of error objects describing specific errors that arose when servicing the request
object
The name of the resource that was being processed when the error occurred
(Optional) The specific field associated with the error
(Optional) A type associated with the error. invalid_value, access_error, value_unavailable
(Optional) A machine code relating to the error that occurred with the field and resource
(Optional) A human-readable message relating to the error that occurred with the field and resource
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
object
A message regarding the error that occurred on the server
(Optional) A URL where documentation regarding this specific error can be found
Example
{ "message": "Bad Credentials"}Not authorized
object
A message regarding the error that occurred on the server
(Optional) A URL where documentation regarding this specific error can be found
Example
{ "message": "You don't have permission to perform that action"}Too many requests
Service unavailable