WP Engine Domain API
The Domain API from WP Engine — 6 operation(s) for domain.
The Domain API from WP Engine — 6 operation(s) for domain.
swagger: '2.0'
info:
description: 'The API described in this document is subject to change.
'
version: 1.17.0
title: WP Engine Hosting Platform Account Domain API
termsOfService: https://wpengine.com/legal/terms-of-service/
host: api.wpengineapi.com
basePath: /v1
schemes:
- https
tags:
- name: Domain
paths:
/installs/{install_id}/domains:
get:
tags:
- Domain
summary: Get the domains for an install by install id
description: Returns domains for a specific install
operationId: listDomains
produces:
- application/json
parameters:
- $ref: '#/parameters/authorization'
- $ref: '#/parameters/limitParam'
- $ref: '#/parameters/offsetParam'
- name: install_id
in: path
format: uuid
description: ID of install
required: true
type: string
x-example: 294deacc-d8b8-4005-82c4-0727ba8ddde0
responses:
'200':
description: List of domains for install
schema:
type: object
properties:
previous:
$ref: '#/definitions/PreviousPage'
next:
$ref: '#/definitions/NextPage'
count:
$ref: '#/definitions/ResultsCount'
results:
type: array
items:
$ref: '#/definitions/Domain'
'401':
description: Authentication Error
schema:
$ref: '#/definitions/AuthenticationErrorResponse'
'403':
description: Not authorized
schema:
$ref: '#/definitions/ForbiddenErrorResponse'
'404':
description: Not found
schema:
$ref: '#/definitions/NotFoundErrorResponse'
'429':
$ref: '#/definitions/TooManyRequestsOperation'
'503':
$ref: '#/definitions/ServiceUnavailableOperation'
security:
- basicAuth: []
x-amazon-apigateway-integration:
uri: https://my.wpengine.com/capi/v1/installs/{install_id}/domains
responses:
'200':
statusCode: '200'
'401':
statusCode: '401'
'403':
statusCode: '403'
'404':
statusCode: '404'
'429':
statusCode: '429'
'503':
statusCode: '503'
default:
statusCode: '500'
requestParameters:
integration.request.header.X-Request-ID: context.requestId
integration.request.header.sourceIp: context.identity.sourceIp
integration.request.header.authorization: method.request.header.Authorization
integration.request.path.install_id: method.request.path.install_id
integration.request.querystring.offset: method.request.querystring.offset
integration.request.querystring.limit: method.request.querystring.limit
passthroughBehavior: when_no_match
httpMethod: GET
type: http
post:
tags:
- Domain
summary: Add a new domain or redirect to an existing install
description: Adds a domain or redirect to a specific install and optionally sets it as the primary domain. For domain verification, see the [Adding and Verifying Domains](https://developers.wpengine.com/docs/managed-hosting-platform/api/guides/adding-and-verifying-domains) guide.
operationId: createDomain
consumes:
- application/json
produces:
- application/json
parameters:
- $ref: '#/parameters/authorization'
- name: install_id
in: path
format: uuid
description: ID of install
required: true
type: string
x-example: 294deacc-d8b8-4005-82c4-0727ba8ddde0
- in: body
name: body
description: '##### 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
'
required: true
schema:
type: object
required:
- name
properties:
name:
type: string
primary:
type: boolean
redirect_to:
type: string
format: uuid
example:
name: example.com
primary: true
responses:
'201':
description: 'Created
Domain 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.
'
schema:
$ref: '#/definitions/Domain'
'400':
description: Bad Request
schema:
$ref: '#/definitions/BadRequestErrorResponse'
'401':
description: Authentication Error
schema:
$ref: '#/definitions/AuthenticationErrorResponse'
'403':
description: Not authorized
schema:
$ref: '#/definitions/ForbiddenErrorResponse'
'429':
description: Too many requests
'503':
$ref: '#/definitions/ServiceUnavailableOperation'
security:
- basicAuth: []
x-amazon-apigateway-integration:
uri: https://my.wpengine.com/capi/v1/installs/{install_id}/domains
responses:
'201':
statusCode: '201'
'400':
statusCode: '400'
'401':
statusCode: '401'
'403':
statusCode: '403'
'429':
statusCode: '429'
'503':
statusCode: '503'
default:
statusCode: '500'
requestParameters:
integration.request.header.X-Request-ID: context.requestId
integration.request.header.sourceIp: context.identity.sourceIp
integration.request.header.authorization: method.request.header.Authorization
integration.request.path.install_id: method.request.path.install_id
passthroughBehavior: when_no_match
httpMethod: POST
type: http
/installs/{install_id}/domains/bulk:
post:
tags:
- Domain
summary: Add multiple domains and redirects to an existing install
description: Adds multiple domains and redirects to a specific install
operationId: createBulkDomains
consumes:
- application/json
produces:
- application/json
parameters:
- $ref: '#/parameters/authorization'
- name: install_id
in: path
format: uuid
description: ID of install
required: true
type: string
x-example: 294deacc-d8b8-4005-82c4-0727ba8ddde0
- in: body
name: body
description: "##### Properties\n* domains - **required** - array of domains to be created, min size: 1, max size: 20\n * items:\n * name - **required** - The name of the new domain (or redirect)\n * redirect_to - **optional** - Name of the domain to set redirect to\n"
required: true
schema:
type: object
required:
- domains
properties:
domains:
type: array
minItems: 1
maxItems: 20
items:
type: object
required:
- name
properties:
name:
type: string
redirect_to:
type: string
example:
domains:
- name: example.com
- name: www.example.com
redirect_to: example.com
responses:
'201':
description: '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.
'
schema:
$ref: '#/definitions/DomainOrRedirect'
'400':
description: Bad Request
schema:
$ref: '#/definitions/BadRequestErrorResponse'
'401':
description: Authentication Error
schema:
$ref: '#/definitions/AuthenticationErrorResponse'
'403':
description: Not authorized
schema:
$ref: '#/definitions/ForbiddenErrorResponse'
'429':
description: Too many requests
'503':
$ref: '#/definitions/ServiceUnavailableOperation'
security:
- basicAuth: []
x-amazon-apigateway-integration:
uri: https://my.wpengine.com/capi/v1/installs/{install_id}/domains/bulk
responses:
'201':
statusCode: '201'
'400':
statusCode: '400'
'401':
statusCode: '401'
'403':
statusCode: '403'
'429':
statusCode: '429'
'503':
statusCode: '503'
default:
statusCode: '500'
requestParameters:
integration.request.header.X-Request-ID: context.requestId
integration.request.header.sourceIp: context.identity.sourceIp
integration.request.header.authorization: method.request.header.Authorization
integration.request.path.install_id: method.request.path.install_id
passthroughBehavior: when_no_match
httpMethod: POST
type: http
/installs/{install_id}/domains/{domain_id}:
get:
tags:
- Domain
summary: Get a specific domain for an install
description: Returns specific domain for an install
operationId: getDomain
produces:
- application/json
parameters:
- $ref: '#/parameters/authorization'
- name: install_id
in: path
format: uuid
description: ID of install
required: true
type: string
x-example: 294deacc-d8b8-4005-82c4-0727ba8ddde0
- name: domain_id
in: path
format: uuid
description: ID of domain
required: true
type: string
x-example: e41fa98f-ea80-4654-b229-a9b765d0863a
responses:
'200':
description: Success
schema:
$ref: '#/definitions/Domain'
'401':
description: Authentication Error
schema:
$ref: '#/definitions/AuthenticationErrorResponse'
'403':
description: Not authorized
schema:
$ref: '#/definitions/ForbiddenErrorResponse'
'404':
description: Not found
schema:
$ref: '#/definitions/NotFoundErrorResponse'
'429':
$ref: '#/definitions/TooManyRequestsOperation'
'503':
$ref: '#/definitions/ServiceUnavailableOperation'
security:
- basicAuth: []
x-amazon-apigateway-integration:
uri: https://my.wpengine.com/capi/v1/installs/{install_id}/domains/{domain_id}
responses:
'200':
statusCode: '200'
'401':
statusCode: '401'
'403':
statusCode: '403'
'404':
statusCode: '404'
'429':
statusCode: '429'
'503':
statusCode: '503'
default:
statusCode: '500'
requestParameters:
integration.request.header.X-Request-ID: context.requestId
integration.request.header.sourceIp: context.identity.sourceIp
integration.request.header.authorization: method.request.header.Authorization
integration.request.path.install_id: method.request.path.install_id
integration.request.path.domain_id: method.request.path.domain_id
passthroughBehavior: when_no_match
httpMethod: GET
type: http
patch:
tags:
- Domain
summary: Update an existing domain for an install
description: Updates an existing domain for an install. Cannot set a duplicate, wildcard, or redirected domain as the primary. For domain verification, see the [Adding and Verifying Domains](https://developers.wpengine.com/docs/managed-hosting-platform/api/guides/adding-and-verifying-domains) guide.
operationId: updateDomain
consumes:
- application/json
produces:
- application/json
parameters:
- $ref: '#/parameters/authorization'
- name: install_id
in: path
description: The install ID
required: true
type: string
format: uuid
x-example: 294deacc-d8b8-4005-82c4-0727ba8ddde0
- name: domain_id
in: path
format: uuid
description: ID of domain
required: true
type: string
x-example: e41fa98f-ea80-4654-b229-a9b765d0863a
- in: body
name: body
description: '##### Properties
* primary - **optional** - Boolean value to make the domain primary on the given install
* redirect_to - **optional** - The UUID of another Domain record, or "nil" to remove an existing redirect.
* secure_all_urls - **optional** - Boolean value to force all URLs to use HTTPS
'
required: true
schema:
type: object
properties:
primary:
type: boolean
example: true
redirect_to:
type: string
example: 6977805b-1f65-4a5d-8d36-6fe609a4d9f3
secure_all_urls:
type: boolean
example: false
responses:
'200':
description: 'Updated
Domain will be updated, 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 domain. After the TXT record is in place, POST to
`/installs/{install_id}/domains/{domain_id}/verification` to complete verification.
'
schema:
$ref: '#/definitions/Domain'
'400':
description: Bad Request
schema:
$ref: '#/definitions/BadRequestErrorResponse'
'401':
description: Authentication Error
schema:
$ref: '#/definitions/AuthenticationErrorResponse'
'403':
description: Not authorized
schema:
$ref: '#/definitions/ForbiddenErrorResponse'
'404':
description: Not found
schema:
$ref: '#/definitions/NotFoundErrorResponse'
'429':
description: Too many requests
'503':
$ref: '#/definitions/ServiceUnavailableOperation'
security:
- basicAuth: []
x-amazon-apigateway-integration:
uri: https://my.wpengine.com/capi/v1/installs/{install_id}/domains/{domain_id}
responses:
'200':
statusCode: '200'
'400':
statusCode: '400'
'401':
statusCode: '401'
'403':
statusCode: '403'
'404':
statusCode: '404'
'429':
statusCode: '429'
'503':
statusCode: '503'
default:
statusCode: '500'
requestParameters:
integration.request.header.X-Request-ID: context.requestId
integration.request.header.sourceIp: context.identity.sourceIp
integration.request.header.authorization: method.request.header.Authorization
integration.request.path.install_id: method.request.path.install_id
integration.request.path.domain_id: method.request.path.domain_id
passthroughBehavior: when_no_match
httpMethod: PATCH
type: http
delete:
tags:
- Domain
summary: Delete a specific domain for an install
description: Delete specific domain for an install
operationId: deleteDomain
parameters:
- $ref: '#/parameters/authorization'
- name: install_id
in: path
format: uuid
description: ID of install
required: true
type: string
x-example: 294deacc-d8b8-4005-82c4-0727ba8ddde0
- name: domain_id
in: path
format: uuid
description: ID of domain
required: true
type: string
x-example: e41fa98f-ea80-4654-b229-a9b765d0863a
responses:
'204':
description: Deleted
'400':
description: Bad Request
schema:
$ref: '#/definitions/BadRequestErrorResponse'
'401':
description: Authentication Error
schema:
$ref: '#/definitions/AuthenticationErrorResponse'
'403':
description: Not authorized
schema:
$ref: '#/definitions/ForbiddenErrorResponse'
'404':
description: Not found
schema:
$ref: '#/definitions/NotFoundErrorResponse'
'429':
$ref: '#/definitions/TooManyRequestsOperation'
'503':
$ref: '#/definitions/ServiceUnavailableOperation'
security:
- basicAuth: []
x-amazon-apigateway-integration:
uri: https://my.wpengine.com/capi/v1/installs/{install_id}/domains/{domain_id}
responses:
'204':
statusCode: '204'
'400':
statusCode: '400'
'401':
statusCode: '401'
'403':
statusCode: '403'
'404':
statusCode: '404'
'429':
statusCode: '429'
'503':
statusCode: '503'
default:
statusCode: '500'
requestParameters:
integration.request.header.X-Request-ID: context.requestId
integration.request.header.sourceIp: context.identity.sourceIp
integration.request.header.authorization: method.request.header.Authorization
integration.request.path.install_id: method.request.path.install_id
integration.request.path.domain_id: method.request.path.domain_id
passthroughBehavior: when_no_match
httpMethod: DELETE
type: http
/installs/{install_id}/domains/{domain_id}/verification:
post:
tags:
- Domain
summary: Trigger domain TXT record verification
description: Triggers verification of the TXT record for a domain to confirm ownership.
operationId: verifyDomainTxtRecord
produces:
- application/json
parameters:
- $ref: '#/parameters/authorization'
- name: install_id
in: path
format: uuid
description: ID of install
required: true
type: string
x-example: 294deacc-d8b8-4005-82c4-0727ba8ddde0
- name: domain_id
in: path
format: uuid
description: ID of domain
required: true
type: string
x-example: e41fa98f-ea80-4654-b229-a9b765d0863a
responses:
'200':
description: Domain verification successful
schema:
$ref: '#/definitions/DomainVerification'
'400':
description: Bad Request
schema:
$ref: '#/definitions/BadRequestErrorResponse'
'401':
description: Authentication Error
schema:
$ref: '#/definitions/AuthenticationErrorResponse'
'403':
description: Not authorized
schema:
$ref: '#/definitions/ForbiddenErrorResponse'
'404':
description: Not found
schema:
$ref: '#/definitions/NotFoundErrorResponse'
'429':
description: Too many requests
'500':
description: Internal server error
schema:
$ref: '#/definitions/InternalServerErrorResponse'
'503':
$ref: '#/definitions/ServiceUnavailableOperation'
security:
- basicAuth: []
x-amazon-apigateway-integration:
uri: https://my.wpengine.com/capi/v1/installs/{install_id}/domains/{domain_id}/verification
responses:
'200':
statusCode: '200'
'400':
statusCode: '400'
'401':
statusCode: '401'
'403':
statusCode: '403'
'404':
statusCode: '404'
'429':
statusCode: '429'
'500':
statusCode: '500'
'503':
statusCode: '503'
default:
statusCode: '500'
requestParameters:
integration.request.header.X-Request-ID: context.requestId
integration.request.header.sourceIp: context.identity.sourceIp
integration.request.header.authorization: method.request.header.Authorization
integration.request.path.install_id: method.request.path.install_id
integration.request.path.domain_id: method.request.path.domain_id
passthroughBehavior: when_no_match
httpMethod: POST
type: http
/installs/{install_id}/domains/{domain_id}/check_status:
post:
tags:
- Domain
summary: Submit a status report for a domain
description: Submit a status report for a domain. Returns a `report_id` that can be used to check the domain's status.
operationId: checkStatus
produces:
- application/json
parameters:
- $ref: '#/parameters/authorization'
- name: install_id
in: path
format: uuid
description: ID of install
required: true
type: string
x-example: 294deacc-d8b8-4005-82c4-0727ba8ddde0
- name: domain_id
in: path
format: uuid
description: ID of domain
required: true
type: string
x-example: e41fa98f-ea80-4654-b229-a9b765d0863a
responses:
'202':
description: Accepted
schema:
$ref: '#/definitions/DomainReport'
'401':
description: Authentication Error
schema:
$ref: '#/definitions/AuthenticationErrorResponse'
'403':
description: Not authorized
schema:
$ref: '#/definitions/ForbiddenErrorResponse'
'404':
description: Not found
schema:
$ref: '#/definitions/NotFoundErrorResponse'
'429':
description: Too many requests
schema:
type: object
required:
- message
properties:
message:
type: string
description: A message regarding the error that occurred on the server
example: Domain status checks are rate-limited to one request every 5 seconds for each install
'500':
description: Internal server error
schema:
$ref: '#/definitions/InternalServerErrorResponse'
'503':
$ref: '#/definitions/ServiceUnavailableOperation'
security:
- basicAuth: []
x-amazon-apigateway-integration:
uri: https://my.wpengine.com/capi/v1/installs/{install_id}/domains/{domain_id}/check_status
responses:
'202':
statusCode: '202'
'401':
statusCode: '401'
'403':
statusCode: '403'
'404':
statusCode: '404'
'429':
statusCode: '429'
'500':
statusCode: '500'
'503':
statusCode: '503'
default:
statusCode: '500'
requestParameters:
integration.request.header.X-Request-ID: context.requestId
integration.request.header.sourceIp: context.identity.sourceIp
integration.request.header.authorization: method.request.header.Authorization
integration.request.path.install_id: method.request.path.install_id
integration.request.path.domain_id: method.request.path.domain_id
passthroughBehavior: when_no_match
httpMethod: POST
type: http
/installs/{install_id}/domains/check_status/{report_id}:
get:
tags:
- Domain
summary: Retrieve a status report for a domain
description: Fetches a status report for a specific domain. Accepts a `report_id`.
operationId: getDomainReportStatus
produces:
- application/json
parameters:
- $ref: '#/parameters/authorization'
- name: install_id
in: path
required: true
type: string
x-example: 294deacc-d8b8-4005-82c4-0727ba8ddde0
- name: report_id
in: path
required: true
type: string
x-example: 6a6d5dbd-5cac-41d5-8f3f-14a3e8ae6f76
responses:
'200':
description: Success
schema:
type: object
properties:
report:
$ref: '#/definitions/DomainStatusReport'
'401':
description: Authentication Error
schema:
$ref: '#/definitions/AuthenticationErrorResponse'
'403':
description: Not authorized
schema:
$ref: '#/definitions/ForbiddenErrorResponse'
'404':
description: Not found
schema:
$ref: '#/definitions/NotFoundErrorResponse'
'429':
$ref: '#/definitions/TooManyRequestsOperation'
'500':
description: Internal server error
schema:
$ref: '#/definitions/InternalServerErrorResponse'
'503':
$ref: '#/definitions/ServiceUnavailableOperation'
security:
- basicAuth: []
x-amazon-apigateway-integration:
uri: https://my.wpengine.com/capi/v1/installs/{install_id}/domains/check_status/{report_id}
responses:
'200':
statusCode: '200'
'401':
statusCode: '401'
'403':
statusCode: '403'
'404':
statusCode: '404'
'429':
statusCode: '429'
'500':
statusCode: '500'
'503':
statusCode: '503'
default:
statusCode: '500'
requestParameters:
integration.request.header.X-Request-ID: context.requestId
integration.request.header.sourceIp: context.identity.sourceIp
integration.request.header.authorization: method.request.header.Authorization
integration.request.path.install_id: method.request.path.install_id
integration.request.path.report_id: method.request.path.report_id
passthroughBehavior: when_no_match
httpMethod: GET
type: http
definitions:
InternalServerErrorResponse:
type: object
required:
- message
properties:
message:
type: string
description: A message regarding the error that occurred on the server
example: An unexpected error occurred, please try again in a few minutes
NotFoundErrorResponse:
type: object
required:
- message
properties:
message:
type: string
description: A message regarding the error that occurred on the server
example: Not Found
documentation_url:
type: string
description: (Optional) A URL where documentation regarding this specific error can be found
DomainOrRedirect:
type: object
required:
- id
- name
- duplicate
- primary
properties:
id:
type: string
format: uuid
example: e41fa98f-ea80-4654-b229-a9b765d0863a
name:
type: string
example: example.com
duplicate:
type: boolean
example: false
primary:
type: boolean
example: true
redirects_to:
type: object
properties:
id:
type: string
format: uuid
example: e41fa98f-ea80-4006-b229-a9b765d0863a
name:
type: string
example: redirect.com
txt_verified_time:
type: string
description: The time when the TXT record was verified
x-nullable: true
example: '2026-04-20T16:00:00.007Z'
txt_verified_domain:
type: string
description: The domain that the TXT record was verified for
example: example.com
txt_verification_key:
type: string
description: The TXT record verification key. Null if the domain is already verified.
x-nullable: true
example: _wpe_verification
txt_verification_value:
type: string
description: The TXT record verification value. Null if the domain is already verified.
x-nullable: true
ownership_status:
type: string
enum:
- TXT_VERIFIED
- TXT_VERIFICATION_PENDING
description: '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.
'
Domain:
type: object
required:
- name
- duplicate
- primary
- id
- secure_all_urls
properties:
name:
type: string
example: torquemag.io
duplicate:
type: boolean
example: true
primary:
type: boolean
example: true
id:
type: string
example: e41fa98f-ea80-4654-b229-a9b765d0863a
network_type:
type: string
description: The WP Engine network type configured for the domain. Possible values are 'AN' (Advanced Network) 'GES' (Global Edge Security) and 'LEGACY'.
example: AN
network_details:
type: object
description: Details about the network configuration for the domain.
properties:
dns_config_info:
type: object
description: DNS configuration information for the domain.
properties:
cname:
type: string
description: The CNAME value to use to configure a DNS CNAME record for the domain.
example: wp.wpenginepowered.com
a_records:
type: array
items:
type: string
description: IP addresses that can be used to configure a DNS A record for the domain.
example:
- 127.0.0.1
network_info:
type: object
properties:
status:
type: string
description: The status of the network configuration for the domain.
example: ACTIVE
ssl:
type: object
description: SSL configuration status
properties:
status:
# --- truncated at 32 KB (45 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/wpengine/refs/heads/main/openapi/wpengine-domain-api-openapi.yml