WP Engine Usage API
The Usage API from WP Engine — 6 operation(s) for usage.
The Usage API from WP Engine — 6 operation(s) for usage.
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-usage-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 Usage API
termsOfService: https://wpengine.com/legal/terms-of-service/
servers:
- url: https://api.wpengineapi.com/v1
tags:
- name: Usage
paths:
/accounts/{account_id}/usage:
get:
tags:
- Usage
summary: Get account usage metrics
description: 'Get usage metrics for all environments in an account.
If the optional `first_date` and `last_date` arguments are omitted, the response will include metrics for the last 30 days.
'
operationId: getAccountUsageMetrics
parameters:
- $ref: '#/components/parameters/authorization'
- name: account_id
in: path
description: ID of account
required: true
x-example: eeda3227-9a39-46ae-9e14-20958bb4e6c9
schema:
type: string
format: uuid
- name: first_date
in: query
description: 'The start date for the requested metrics range (inclusive).
Format: `YYYY-mm-dd`. Cannot be older than 13 months.
If `first_date` is provided, `last_date` must also be provided.'
required: false
schema:
type: string
format: date
pattern: ^\d{4}-\d{2}-\d{2}$
- name: last_date
in: query
description: 'The end date for the requested metrics range (inclusive).
Format: `YYYY-mm-dd`.
If `last_date` is provided, `first_date` must also be provided.'
required: false
schema:
type: string
format: date
pattern: ^\d{4}-\d{2}-\d{2}$
- name: limit
in: query
description: The maximum number of environments to return. A maximum of 1000 environments can be requested per page
required: false
schema:
type: integer
default: 100
maximum: 1000
- name: offset
in: query
description: String-encoded offset for pagination. The next_page_token from the response can be used to paginate accordingly.
required: false
schema:
type: string
responses:
'200':
description: A successful response.
content:
application/json:
schema:
$ref: '#/components/schemas/AccountUsageMetricsResponse'
'400':
description: Bad Request. The request was improperly formatted or contained invalid parameters.
content:
application/json:
schema:
$ref: '#/components/schemas/UsageErrorResponse'
'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. The requested account id does not exist.
content:
application/json:
schema:
$ref: '#/components/schemas/NotFoundErrorResponse'
'429':
$ref: '#/components/schemas/TooManyRequestsOperation'
default:
description: An unexpected error response.
content:
application/json:
schema:
$ref: '#/components/schemas/InternalServerErrorResponse'
security:
- basicAuth: []
x-amazon-apigateway-integration:
uri: https://my.wpengine.com/capi/v1/accounts/{account_id}/usage
responses:
'200':
statusCode: '200'
'400':
statusCode: '400'
'401':
statusCode: '401'
'403':
statusCode: '403'
'404':
statusCode: '404'
'429':
statusCode: '429'
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.account_id: method.request.path.account_id
integration.request.querystring.first_date: method.request.querystring.first_date
integration.request.querystring.last_date: method.request.querystring.last_date
integration.request.querystring.limit: method.request.querystring.limit
integration.request.querystring.offset: method.request.querystring.offset
passthroughBehavior: when_no_match
httpMethod: GET
type: http
/accounts/{account_id}/usage/refresh_disk_usage:
post:
summary: Refresh Disk Usage for all installs associated with account
description: 'Triggers an asynchronous job to recalculate the disk usage of installs associated with a specific account.
This endpoint initiates the refresh process and returns immediately with a success status. **It does not return the updated usage data.**
To check the status of the job and view the new data once it''s available, you must poll the `GET /accounts/{account_id}/usage` endpoint. A successful request will populate the `account_storage_refresh_expected_time` attribute in that endpoint''s response, indicating when the data is expected to be fresh.
Multiple requests for the same environment will result in a single recalculation.
'
tags:
- Usage
parameters:
- name: account_id
in: path
description: The unique identifier (UUID) of the account.
required: true
x-example: eeda3227-9a39-46ae-9e14-20958bb4e6c9
schema:
type: string
format: uuid
- $ref: '#/components/parameters/authorization'
responses:
'200':
description: OK. The disk usage refresh has been successfully initiated. The response body for this request is always `null`.
'400':
description: Bad Request
'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. The account with the specified UUID could not be found.
content:
application/json:
schema:
$ref: '#/components/schemas/NotFoundErrorResponse'
'429':
$ref: '#/components/schemas/TooManyRequestsOperation'
'500':
description: Internal server error
'502':
$ref: '#/components/schemas/BadGatewayOperation'
'503':
$ref: '#/components/schemas/ServiceUnavailableOperation'
default:
description: An unexpected error occurred.
content:
application/json:
schema:
$ref: '#/components/schemas/InternalServerErrorResponse'
security:
- basicAuth: []
x-amazon-apigateway-integration:
uri: https://my.wpengine.com/capi/v1/accounts/{account_id}/usage/refresh_disk_usage
responses:
'200':
statusCode: '200'
'400':
statusCode: '400'
'401':
statusCode: '401'
'403':
statusCode: '403'
'404':
statusCode: '404'
'429':
statusCode: '429'
'500':
statusCode: '500'
'502':
statusCode: '502'
'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.account_id: method.request.path.account_id
passthroughBehavior: when_no_match
httpMethod: POST
type: http
/accounts/{account_id}/usage/summary:
get:
tags:
- Usage
summary: Get account level usage summary
description: 'Get the usage summary over a time period for the specificied account. The default response is a summary of the
last 30 days. The optional `first_date` and `last_date` arguments can be specified to retrieve a summary over
a custom date range. Both arguments must be provided and the range cannot exceed 31 days.'
operationId: getAccountUsageSummary
parameters:
- $ref: '#/components/parameters/authorization'
- name: account_id
in: path
description: ID of account
required: true
x-example: eeda3227-9a39-46ae-9e14-20958bb4e6c9
schema:
type: string
format: uuid
- name: first_date
in: query
description: 'The start date for the requested metrics range (inclusive).
Format: `YYYY-mm-dd`. Cannot be older than 13 months.
If `first_date` is provided, `last_date` must also be provided.'
required: false
schema:
type: string
format: date
pattern: ^\d{4}-\d{2}-\d{2}$
- name: last_date
in: query
description: 'The end date for the requested metrics range (inclusive).
Format: `YYYY-mm-dd`.
If `last_date` is provided, `first_date` must also be provided.'
required: false
schema:
type: string
format: date
pattern: ^\d{4}-\d{2}-\d{2}$
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/UsageMetricsRollup'
'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'
'502':
$ref: '#/components/schemas/BadGatewayOperation'
'503':
$ref: '#/components/schemas/ServiceUnavailableOperation'
security:
- basicAuth: []
x-amazon-apigateway-integration:
uri: https://my.wpengine.com/capi/v1/accounts/{account_id}/usage/summary
responses:
'200':
statusCode: '200'
'400':
statusCode: '400'
'401':
statusCode: '401'
'403':
statusCode: '403'
'404':
statusCode: '404'
'429':
statusCode: '429'
'502':
statusCode: '502'
'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.account_id: method.request.path.account_id
integration.request.querystring.first_date: method.request.querystring.first_date
integration.request.querystring.last_date: method.request.querystring.last_date
passthroughBehavior: when_no_match
httpMethod: GET
type: http
/accounts/{account_id}/usage/insights:
get:
tags:
- Usage
summary: Get account usage insights
description: 'Get detailed usage insights for the specified account across different environment types and site types.
The default response is a summary of the last 30 days. The optional `first_date` and `last_date` arguments
can be specified to retrieve insights over a custom date range. Both arguments must be provided and the
range cannot exceed 31 days.'
operationId: getAccountUsageInsights
parameters:
- $ref: '#/components/parameters/authorization'
- name: account_id
in: path
description: ID of account
required: true
x-example: eeda3227-9a39-46ae-9e14-20958bb4e6c9
schema:
type: string
format: uuid
- name: first_date
in: query
description: 'The start date for the requested metrics range (inclusive).
Format: `YYYY-mm-dd`. Cannot be older than 13 months.
If `first_date` is provided, `last_date` must also be provided.'
required: false
schema:
type: string
format: date
pattern: ^\d{4}-\d{2}-\d{2}$
- name: last_date
in: query
description: 'The end date for the requested metrics range (inclusive).
Format: `YYYY-mm-dd`.
If `last_date` is provided, `first_date` must also be provided.'
required: false
schema:
type: string
format: date
pattern: ^\d{4}-\d{2}-\d{2}$
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/AccountUsageInsights'
'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'
'502':
$ref: '#/components/schemas/BadGatewayOperation'
'503':
$ref: '#/components/schemas/ServiceUnavailableOperation'
security:
- basicAuth: []
x-amazon-apigateway-integration:
uri: https://my.wpengine.com/capi/v1/accounts/{account_id}/usage/insights
responses:
'200':
statusCode: '200'
'400':
statusCode: '400'
'401':
statusCode: '401'
'403':
statusCode: '403'
'404':
statusCode: '404'
'429':
statusCode: '429'
'502':
statusCode: '502'
'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.account_id: method.request.path.account_id
integration.request.querystring.first_date: method.request.querystring.first_date
integration.request.querystring.last_date: method.request.querystring.last_date
passthroughBehavior: when_no_match
httpMethod: GET
type: http
/installs/{install_id}/usage:
get:
tags:
- Usage
summary: Get a list of daily usage metrics
operationId: getInstallUsageMetrics
description: 'Get a list of daily usage metrics related to this install.
If the optional `first_date` and `last_date` arguments are omitted, the response will include metrics for the last 30 days.
For days where there are no storage metrics, they will be artificially filled with the last known storage metrics.'
parameters:
- $ref: '#/components/parameters/authorization'
- name: install_id
in: path
description: The UUID of the install.
required: true
x-example: 294deacc-d8b8-4005-82c4-0727ba8ddde0
schema:
type: string
format: uuid
- name: first_date
in: query
description: 'The start date for the requested metrics range (inclusive).
Format: `YYYY-mm-dd`. Cannot be older than 13 months.
If `first_date` is provided, `last_date` must also be provided.'
required: false
schema:
type: string
format: date
pattern: ^\d{4}-\d{2}-\d{2}$
- name: last_date
in: query
description: 'The end date for the requested metrics range (inclusive).
Format: `YYYY-mm-dd`.
If `last_date` is provided, `first_date` must also be provided.'
required: false
schema:
type: string
format: date
pattern: ^\d{4}-\d{2}-\d{2}$
responses:
'200':
description: A successful response.
content:
application/json:
schema:
$ref: '#/components/schemas/InstallDailyUsageMetricsSeries'
'400':
description: Bad Request. The request was improperly formatted or contained invalid parameters.
content:
application/json:
schema:
$ref: '#/components/schemas/UsageErrorResponse'
'404':
description: Not Found. The requested install id does not exist.
content:
application/json:
schema:
$ref: '#/components/schemas/NotFoundErrorResponse'
example:
message: Not found
default:
description: An unexpected error response.
content:
application/json:
schema:
$ref: '#/components/schemas/InternalServerErrorResponse'
security:
- basicAuth: []
x-amazon-apigateway-integration:
uri: https://my.wpengine.com/capi/v1/installs/{install_id}/usage
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.querystring.first_date: method.request.querystring.first_date
integration.request.querystring.last_date: method.request.querystring.last_date
passthroughBehavior: when_no_match
httpMethod: GET
type: http
/installs/{install_id}/usage/refresh_disk_usage:
post:
tags:
- Usage
summary: Refresh disk usage for the given WordPress site environment
operationId: refreshEnvironmentDiskUsage
description: 'Triggers an asynchronous job to recalculate the disk usage for the given WordPress site environment.
This endpoint initiates the refresh process and returns immediately with a success status. **It does not return the updated usage data.**
To check the status of the job and view the new data once it''s available, you must poll for daily usage metrics at `GET /installs/{install_id}/usage`. The estimated time of completion can be viewed in daily usage metrics as the `storage_refresh_expected_time` field. If the field is `null`, the job has already completed.
The last time storage was refreshed can be viewed in the `storage_update_time` field of daily usage metrics.
Multiple requests for the same environment will result in a single recalculation.'
parameters:
- $ref: '#/components/parameters/authorization'
- name: install_id
in: path
description: The UUID of the install.
required: true
x-example: 294deacc-d8b8-4005-82c4-0727ba8ddde0
schema:
type: string
format: uuid
responses:
'200':
description: OK. The disk usage refresh has been successfully initiated. The response body for this request is always `null`.
'400':
description: Bad Request
'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'
'502':
$ref: '#/components/schemas/BadGatewayOperation'
'503':
$ref: '#/components/schemas/ServiceUnavailableOperation'
default:
description: An unexpected error response.
content:
application/json:
schema:
$ref: '#/components/schemas/InternalServerErrorResponse'
security:
- basicAuth: []
x-amazon-apigateway-integration:
uri: https://my.wpengine.com/capi/v1/installs/{install_id}/usage/refresh_disk_usage
responses:
'200':
statusCode: '200'
'400':
statusCode: '400'
'401':
statusCode: '401'
'403':
statusCode: '403'
'404':
statusCode: '404'
'429':
statusCode: '429'
'500':
statusCode: '500'
'502':
statusCode: '502'
'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
components:
schemas:
ServiceUnavailableOperation:
description: Service unavailable
DailyUsageMetrics:
type: object
properties:
date:
type: string
description: The date (ISO 8601).
visit_count:
type:
- string
- 'null'
format: int64
description: Total visits.
network_origin_bytes:
type:
- string
- 'null'
format: int64
description: 'Data served over HTTP by the origin server.
This does not include cached data served from a CDN.
'
storage_file_bytes:
type:
- string
- 'null'
format: int64
description: 'Storage used by this environment''s files.
This includes all files in the web root directory.
'
storage_database_bytes:
type:
- string
- 'null'
format: int64
description: Storage used by this environment's database.
billable_visits:
type:
- string
- 'null'
format: int64
description: Billable visits.
request_origin_count:
type:
- string
- 'null'
format: int64
description: 'The total number of HTTP requests received by the origin server.
This does not include cached requests that were served from a CDN.
'
network_cdn_bytes:
type:
- string
- 'null'
format: int64
description: The data served by the CDN.
storage_update_time:
type:
- string
- 'null'
format: date-time
description: The most recent storage usage measurement time (in UTC).
network_total_bytes:
type:
- string
- 'null'
format: int64
description: The sum of CDN and origin network bytes.
traffic_metrics_source:
$ref: '#/components/schemas/DailyUsageMetricsTrafficMetricsSource'
description: The source of the traffic metrics.
database_tables_count:
type:
- string
- 'null'
format: int64
description: The number of tables in the install's database.
database_sql_bytes:
type:
- string
- 'null'
format: int64
description: The sum of bytes of the database content in MySQL for an install.
autoloaded_bytes:
type:
- string
- 'null'
format: int64
description: The sum of bytes that is automatically loaded on each request to the install.
description: 'Usage metrics collected over the period of one day.
In JSON format, the DailyUsageMetrics int64 values are encoded as a string rather
than a number, following the [proto3 specification](https://developers.google.com/protocol-buffers/docs/proto3#json).
'
UsageErrorResponse:
type: object
required:
- message
properties:
message:
type: string
description: A message explaining the error.
example: Must provide or omit both first_date and last_date.
ResourceError:
type: object
required:
- resource
- field
- type
- code
- message
properties:
resource:
type: string
description: The name of the resource that was being processed when the error occurred
example: Site
field:
type: string
description: (Optional) The specific field associated with the error
example: name
type:
type: string
description: (Optional) A type associated with the error. `invalid_value`, `access_error`, `value_unavailable`
example: invalid_value
code:
type: string
description: (Optional) A machine code relating to the error that occurred with the field and resource
example: too_long
message:
type: string
description: (Optional) A human-readable message relating to the error that occurred with the field and resource
example: Name is too long (maximum is 40 characters)
EnvironmentMetrics:
type: object
properties:
environment_name:
type: string
description: The name of the environment
metrics:
type: array
items:
$ref: '#/components/schemas/DailyUsageMetrics'
description: Daily usage metrics for this environment
metrics_rollup:
$ref: '#/components/schemas/UsageMetricsRollup'
description: Rollup of the usage metrics for this environment
storage_refresh_expected_time:
type:
- string
- 'null'
format: date-time
description: The expected time when the storage refresh will complete for this environment
EnvironmentTypeBreakdown:
type: object
properties:
production:
type:
- string
- 'null'
description: Usage for production environments
example: '1354'
staging:
type:
- string
- 'null'
description: Usage for staging environments
example: '177'
development:
type:
- string
- 'null'
description: Usage for development environments
example: '164'
description: Breakdown of usage by environment type
ForbiddenErrorResponse:
type: object
required:
- message
properties:
message:
type: string
description: A message regarding the error that occurred on the server
example: You don't have permission to perform that action
documentation_url:
type: string
description: (Optional) A URL where documentation regarding this specific error can be found
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
InstallDailyUsageMetricsSeries:
type: object
properties:
install_name:
type: string
description: The name of the install for the included metrics.
metrics:
type: array
items:
type: object
$ref: '#/components/schemas/DailyUsageMetrics'
description: 'The requested metrics for an install.
Metrics will include daily usage metrics for the last 30 days.
Metrics will be sorted in descending order (most recent date first).
'
metrics_rollup:
$ref: '#/components/schemas/UsageMetricsRollup'
description: Rollup of the usage metrics.
storage_refresh_expected_time:
type:
- string
- 'null'
format: date-time
description: 'Represents the estimated completion time (in UTC) for a refresh disk usage operation.
If a refresh is not in progress, then this field will be null.
'
description: A daily usage metrics series.
AccountUsageInsights:
type: object
properties:
visit_count:
$ref: '#/components/schemas/UsageMetricBreakdown'
billable_visits:
$ref: '#/components/schemas/UsageMetricBreakdown'
network_origin_bytes:
$ref: '#/components/schemas/UsageMetricBreakdown'
network_cdn_bytes:
$ref: '#/components/schemas/UsageMetricBreakdown'
network_total_bytes:
$ref: '#/components/schemas/UsageMetricBreakdown'
storage_file_bytes:
$ref: '#/components/schemas/UsageMetricBreakdown'
storage_database_bytes:
$ref: '#/components/schemas/UsageMetricBreakdown'
request_origin_count:
$ref: '#/components/schemas/UsageMetricBreakdown'
description: Comprehensive account usage insights broken down by environment types and site types
BadGatewayOperation:
description: An invalid response was received from an upstream server
LatestMetricValue:
type: object
properties:
date:
type: string
description: The date (ISO 8601).
value:
type: string
format: int64
description: The value.
description: The latest information.
UsageMetricsRollup:
# --- truncated at 32 KB (40 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/wpengine/refs/heads/main/openapi/wpengine-usage-api-openapi.yml