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.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/wpengine-domain-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.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/
servers:
- url: https://api.wpengineapi.com/v1
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
parameters:
- $ref: '#/components/parameters/authorization'
- $ref: '#/components/parameters/limitParam'
- $ref: '#/components/parameters/offsetParam'
- name: install_id
in: path
description: ID of install
required: true
x-example: 294deacc-d8b8-4005-82c4-0727ba8ddde0
schema:
type: string
format: uuid
responses:
'200':
description: List of domains for install
content:
application/json:
schema:
type: object
properties:
previous:
$ref: '#/components/schemas/PreviousPage'
next:
$ref: '#/components/schemas/NextPage'
count:
$ref: '#/components/schemas/ResultsCount'
results:
type: array
items:
$ref: '#/components/schemas/Domain'
'401':
description: Authentication Error
content:
application/json:
schema:
$ref: '#/components/schemas/AuthenticationErrorResponse'
'403':
description: Not authorized
content:
application/json:
schema:
$ref: '#/components/schemas/ForbiddenErrorResponse'
'404':
description: Not found
content:
application/json:
schema:
$ref: '#/components/schemas/NotFoundErrorResponse'
'429':
$ref: '#/components/schemas/TooManyRequestsOperation'
'503':
$ref: '#/components/schemas/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
parameters:
- $ref: '#/components/parameters/authorization'
- name: install_id
in: path
description: ID of install
required: true
x-example: 294deacc-d8b8-4005-82c4-0727ba8ddde0
schema:
type: string
format: uuid
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.
'
content:
application/json:
schema:
$ref: '#/components/schemas/Domain'
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/BadRequestErrorResponse'
'401':
description: Authentication Error
content:
application/json:
schema:
$ref: '#/components/schemas/AuthenticationErrorResponse'
'403':
description: Not authorized
content:
application/json:
schema:
$ref: '#/components/schemas/ForbiddenErrorResponse'
'429':
description: Too many requests
'503':
$ref: '#/components/schemas/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
requestBody:
content:
application/json:
schema:
type: object
required:
- name
properties:
name:
type: string
primary:
type: boolean
redirect_to:
type: string
format: uuid
example:
name: example.com
primary: true
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
/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
parameters:
- $ref: '#/components/parameters/authorization'
- name: install_id
in: path
description: ID of install
required: true
x-example: 294deacc-d8b8-4005-82c4-0727ba8ddde0
schema:
type: string
format: uuid
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.
'
content:
application/json:
schema:
$ref: '#/components/schemas/DomainOrRedirect'
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/BadRequestErrorResponse'
'401':
description: Authentication Error
content:
application/json:
schema:
$ref: '#/components/schemas/AuthenticationErrorResponse'
'403':
description: Not authorized
content:
application/json:
schema:
$ref: '#/components/schemas/ForbiddenErrorResponse'
'429':
description: Too many requests
'503':
$ref: '#/components/schemas/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
requestBody:
content:
application/json:
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
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
/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
parameters:
- $ref: '#/components/parameters/authorization'
- name: install_id
in: path
description: ID of install
required: true
x-example: 294deacc-d8b8-4005-82c4-0727ba8ddde0
schema:
type: string
format: uuid
- name: domain_id
in: path
description: ID of domain
required: true
x-example: e41fa98f-ea80-4654-b229-a9b765d0863a
schema:
type: string
format: uuid
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/Domain'
'401':
description: Authentication Error
content:
application/json:
schema:
$ref: '#/components/schemas/AuthenticationErrorResponse'
'403':
description: Not authorized
content:
application/json:
schema:
$ref: '#/components/schemas/ForbiddenErrorResponse'
'404':
description: Not found
content:
application/json:
schema:
$ref: '#/components/schemas/NotFoundErrorResponse'
'429':
$ref: '#/components/schemas/TooManyRequestsOperation'
'503':
$ref: '#/components/schemas/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
parameters:
- $ref: '#/components/parameters/authorization'
- name: install_id
in: path
description: The install ID
required: true
x-example: 294deacc-d8b8-4005-82c4-0727ba8ddde0
schema:
type: string
format: uuid
- name: domain_id
in: path
description: ID of domain
required: true
x-example: e41fa98f-ea80-4654-b229-a9b765d0863a
schema:
type: string
format: uuid
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.
'
content:
application/json:
schema:
$ref: '#/components/schemas/Domain'
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/BadRequestErrorResponse'
'401':
description: Authentication Error
content:
application/json:
schema:
$ref: '#/components/schemas/AuthenticationErrorResponse'
'403':
description: Not authorized
content:
application/json:
schema:
$ref: '#/components/schemas/ForbiddenErrorResponse'
'404':
description: Not found
content:
application/json:
schema:
$ref: '#/components/schemas/NotFoundErrorResponse'
'429':
description: Too many requests
'503':
$ref: '#/components/schemas/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
requestBody:
content:
application/json:
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
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
delete:
tags:
- Domain
summary: Delete a specific domain for an install
description: Delete specific domain for an install
operationId: deleteDomain
parameters:
- $ref: '#/components/parameters/authorization'
- name: install_id
in: path
description: ID of install
required: true
x-example: 294deacc-d8b8-4005-82c4-0727ba8ddde0
schema:
type: string
format: uuid
- name: domain_id
in: path
description: ID of domain
required: true
x-example: e41fa98f-ea80-4654-b229-a9b765d0863a
schema:
type: string
format: uuid
responses:
'204':
description: Deleted
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/BadRequestErrorResponse'
'401':
description: Authentication Error
content:
application/json:
schema:
$ref: '#/components/schemas/AuthenticationErrorResponse'
'403':
description: Not authorized
content:
application/json:
schema:
$ref: '#/components/schemas/ForbiddenErrorResponse'
'404':
description: Not found
content:
application/json:
schema:
$ref: '#/components/schemas/NotFoundErrorResponse'
'429':
$ref: '#/components/schemas/TooManyRequestsOperation'
'503':
$ref: '#/components/schemas/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
parameters:
- $ref: '#/components/parameters/authorization'
- name: install_id
in: path
description: ID of install
required: true
x-example: 294deacc-d8b8-4005-82c4-0727ba8ddde0
schema:
type: string
format: uuid
- name: domain_id
in: path
description: ID of domain
required: true
x-example: e41fa98f-ea80-4654-b229-a9b765d0863a
schema:
type: string
format: uuid
responses:
'200':
description: Domain verification successful
content:
application/json:
schema:
$ref: '#/components/schemas/DomainVerification'
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/BadRequestErrorResponse'
'401':
description: Authentication Error
content:
application/json:
schema:
$ref: '#/components/schemas/AuthenticationErrorResponse'
'403':
description: Not authorized
content:
application/json:
schema:
$ref: '#/components/schemas/ForbiddenErrorResponse'
'404':
description: Not found
content:
application/json:
schema:
$ref: '#/components/schemas/NotFoundErrorResponse'
'429':
description: Too many requests
'500':
description: Internal server error
content:
application/json:
schema:
$ref: '#/components/schemas/InternalServerErrorResponse'
'503':
$ref: '#/components/schemas/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
parameters:
- $ref: '#/components/parameters/authorization'
- name: install_id
in: path
description: ID of install
required: true
x-example: 294deacc-d8b8-4005-82c4-0727ba8ddde0
schema:
type: string
format: uuid
- name: domain_id
in: path
description: ID of domain
required: true
x-example: e41fa98f-ea80-4654-b229-a9b765d0863a
schema:
type: string
format: uuid
responses:
'202':
description: Accepted
content:
application/json:
schema:
$ref: '#/components/schemas/DomainReport'
'401':
description: Authentication Error
content:
application/json:
schema:
$ref: '#/components/schemas/AuthenticationErrorResponse'
'403':
description: Not authorized
content:
application/json:
schema:
$ref: '#/components/schemas/ForbiddenErrorResponse'
'404':
description: Not found
content:
application/json:
schema:
$ref: '#/components/schemas/NotFoundErrorResponse'
'429':
description: Too many requests
content:
application/json:
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
content:
application/json:
schema:
$ref: '#/components/schemas/InternalServerErrorResponse'
'503':
$ref: '#/components/schemas/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
parameters:
- $ref: '#/components/parameters/authorization'
- name: install_id
in: path
required: true
x-example: 294deacc-d8b8-4005-82c4-0727ba8ddde0
schema:
type: string
- name: report_id
in: path
required: true
x-example: 6a6d5dbd-5cac-41d5-8f3f-14a3e8ae6f76
schema:
type: string
responses:
'200':
description: Success
content:
application/json:
schema:
type: object
properties:
report:
$ref: '#/components/schemas/DomainStatusReport'
'401':
description: Authentication Error
content:
application/json:
schema:
$ref: '#/components/schemas/AuthenticationErrorResponse'
'403':
description: Not authorized
content:
application/json:
schema:
$ref: '#/components/schemas/ForbiddenErrorResponse'
'404':
description: Not found
content:
application/json:
schema:
$ref: '#/components/schemas/NotFoundErrorResponse'
'429':
$ref: '#/components/schemas/TooManyRequestsOperation'
'500':
description: Internal server error
content:
application/json:
schema:
$ref: '#/components/schemas/InternalServerErrorResponse'
'503':
$ref: '#/components/schemas/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
components:
schemas:
ServiceUnavailableOperation:
description: Service unavailable
NextPage:
type:
- string
- 'null'
example: https://api.wpengineapi.com/v1/example-endpoint?limit=100&offset=200
description: Path to the next page of results
DomainStatusReport:
type: object
properties:
complete:
type: boolean
description: The status of the report
example: true
id:
type: string
description: The UUID of the report
example: 6a6d5dbd-5cac-41d5-8f3f-14a3e8ae6f76
install_name:
type: string
description: Name of the install
install_ip:
type: string
description: IP address for the install
admin:
type: boolean
description: Admin status
example: false
domains:
type: array
description: The list of domains associated with this report
items:
$ref: '#/components/schemas/DomainStatus'
PreviousPage:
type:
- string
- 'null'
example: https://api.wpengineapi.com/v1/example-endpoint?limit=100&offset=0
description: Path to the previous page of results
ResourceError:
type: object
required:
- resource
- field
- type
- code
- message
properties:
resource:
# --- truncated at 32 KB (49 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/wpengine/refs/heads/main/openapi/wpengine-domain-api-openapi.yml