Create a domain
package main
import ( "fmt" "strings" "net/http" "io")
func main() {
url := "https://api.wpengineapi.com/v1/installs/294deacc-d8b8-4005-82c4-0727ba8ddde0/domains"
payload := strings.NewReader("{ \"name\": \"example.com\", \"primary\": true }")
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/294deacc-d8b8-4005-82c4-0727ba8ddde0/domains';const options = { method: 'POST', headers: {Authorization: 'Basic <credentials>', 'Content-Type': 'application/json'}, body: '{"name":"example.com","primary":true}'};
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/294deacc-d8b8-4005-82c4-0727ba8ddde0/domains \ --header 'Authorization: Basic <credentials>' \ --header 'Content-Type: application/json' \ --data '{ "name": "example.com", "primary": true }'Adds a domain or redirect to the install, and optionally sets it as the primary domain. For domain verification, see the Adding and Verifying Domains guide.
Limitations & Warnings
- The domain is created, but doesn’t serve traffic until its ownership is
verified. Verification status is in the
ownership_statusfield (TXT_VERIFIEDorTXT_VERIFICATION_PENDING). - To verify the domain, add a DNS TXT record to your domain registry using
the
txt_verification_keyandtxt_verification_valuefields on the created domain. Then POST to/installs/{install_id}/domains/{domain_id}/verificationto complete verification.
Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Path Parameters
Section titled “Path Parameters”ID of install
Example
294deacc-d8b8-4005-82c4-0727ba8ddde0Request Bodyrequired
Section titled “Request Bodyrequired”Properties
- name - required - The name of the new domain
- primary - optional - Sets the domain as the primary domain on the install
- redirect_to - optional - ID of a domain to create a redirect to
object
Example
{ "name": "example.com", "primary": true}Responses
Section titled “Responses”Returns the created Domain object.
object
The WP Engine network type configured for the domain. Possible values are ‘AN’ (Advanced Network) ‘GES’ (Global Edge Security) and ‘LEGACY’.
Details about the network configuration for the domain.
object
DNS configuration information for the domain.
object
The CNAME value to use to configure a DNS CNAME record for the domain.
IP addresses that can be used to configure a DNS A record for the domain.
object
The status of the network configuration for the domain.
SSL configuration status
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
{ "name": "torquemag.io", "duplicate": true, "primary": true, "id": "e41fa98f-ea80-4654-b229-a9b765d0863a", "network_type": "AN", "network_details": { "dns_config_info": { "cname": "wp.wpenginepowered.com", "a_records": [ "127.0.0.1" ] }, "network_info": { "status": "ACTIVE", "ssl": { "status": "active" } } }, "redirects_to": [ { "id": "e41fa98f-ea80-4006-b229-a9b765d0863a", "name": "redirect.com" } ], "secure_all_urls": false, "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 request.", "errors": [ { "resource": "Resource", "field": "field_name", "type": "invalid_value", "code": "invalid", "message": "The value is invalid." } ]}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"}Not found
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": "Not Found"}Too many requests
Internal Server Error
object
A message regarding the error that occurred on the server
Example
{ "message": "An unexpected error occurred, please try again in a few minutes"}Service unavailable