{"id":31861,"date":"2025-04-21T12:20:28","date_gmt":"2025-04-21T17:20:28","guid":{"rendered":"https:\/\/wpengine.com\/builders\/?p=31861"},"modified":"2025-12-09T10:55:50","modified_gmt":"2025-12-09T16:55:50","slug":"mastering-the-wp-engine-api-a-comprehensive-guide-for-developers","status":"publish","type":"post","link":"https:\/\/wpengine.com\/builders\/mastering-the-wp-engine-api-a-comprehensive-guide-for-developers\/","title":{"rendered":"Mastering the WP Engine Hosting Platform API: A Comprehensive Guide for Developers"},"content":{"rendered":"\n<p>In today&#8217;s fast-paced digital landscape, automation is key to efficient workflow management. For developers and agencies working with WordPress sites hosted on WP Engine, our <a href=\"https:\/\/wpengineapi.com\/\">Hosting Platform API<\/a> offers powerful capabilities to programmatically manage your hosting infrastructure. Whether you&#8217;re managing a single site or hundreds, the API enables you to automate repetitive tasks, integrate with your existing tools, and build custom workflows tailored to your needs.<\/p>\n\n\n\n<p>This guide will cover everything you need to know about the WP Engine Hosting Platform API, from basic concepts to advanced implementation strategies. It includes practical code examples using Node.js\/JavaScript. An example <a href=\"https:\/\/github.com\/kellenmace\/wpe-site-management-cli\">WP Engine Site Management CLI Tool<\/a> app is also provided that demonstrates how to use the API in practice.<\/p>\n\n\n\n<p>A video covering this same topic is also available here:<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Mastering the WP Engine Hosting Platform API: A Comprehensive Guide for Developers\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/KzLUhtoicFk?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<div class=\"wp-block-group has-polar-background-color has-background is-layout-flow wp-container-core-group-is-layout-7a03825d wp-block-group-is-layout-flow\" style=\"padding-top:var(--wp--preset--spacing--30);padding-right:var(--wp--preset--spacing--40);padding-bottom:var(--wp--preset--spacing--30);padding-left:var(--wp--preset--spacing--40)\">\n<p class=\"has-large-font-size\"><strong>Table of Contents<\/strong><\/p>\n\n\n\n<ul id=\"Prerequisites\" class=\"wp-block-list\">\n<li><a href=\"#prerequisites\">Prerequisites<\/a><\/li>\n\n\n\n<li><a href=\"#what-is-the-wp-engine-api\">What is the WP Engine Hosting Platform API?<\/a><\/li>\n\n\n\n<li><a href=\"#getting-started-with-the-wp-engine-api\">Getting Started with the Hosting Platform API<\/a><\/li>\n\n\n\n<li><a href=\"#core-api-functionality\">Core API Functionality<\/a><\/li>\n\n\n\n<li><a href=\"#wp-engine-site-management-cli-tool\">A Complete Example: WP Engine Site Management CLI Tool<\/a><\/li>\n\n\n\n<li><a href=\"#advanced-topics\">Advanced Topics<\/a><\/li>\n\n\n\n<li><a href=\"#best-practices\">Best Practices<\/a><\/li>\n\n\n\n<li><a href=\"#conclusion\">Conclusion<\/a><\/li>\n\n\n\n<li><a href=\"#resources\">Resources<\/a><\/li>\n<\/ul>\n<\/div>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"prerequisites\">Prerequisites<\/h2>\n\n\n\n<p>To get the most out of this guide, you should have:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Basic familiarity with&nbsp;<a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/JavaScript\">JavaScript<\/a>&nbsp;and&nbsp;<a href=\"https:\/\/nodejs.org\/\">Node.js<\/a><\/li>\n\n\n\n<li>Experience working with&nbsp;<a href=\"https:\/\/en.wikipedia.org\/wiki\/REST\">REST<\/a>&nbsp;APIs (making HTTP requests, handling JSON responses)<\/li>\n\n\n\n<li>Node.js installed<\/li>\n<\/ul>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"what-is-the-wp-engine-api\">What is the WP Engine Hosting Platform API?<\/h2>\n\n\n\n<p>The WP Engine Hosting Platform API is a RESTful API that allows customers to interact with their WP Engine account programmatically. Rather than manually performing tasks in the WP Engine User Portal, you can use the API to automate those tasks, saving time and reducing the potential for human error.<\/p>\n\n\n\n<p>The API follows RESTful principles and uses standard HTTP methods (GET, POST, PUT, DELETE) to perform operations on resources. It returns data in JSON format, making it easy to integrate with any programming language or framework.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Common Use Cases<\/h3>\n\n\n\n<p>The Hosting Platform API is particularly useful for:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Agencies managing multiple client sites<\/strong>: Automate site creation, user management, and domain configuration<\/li>\n\n\n\n<li><strong>DevOps teams<\/strong>: Integrate WP Engine operations into CI\/CD pipelines<\/li>\n\n\n\n<li><strong>Custom dashboards<\/strong>: Build custom interfaces for your team or clients<\/li>\n\n\n\n<li><strong>Scheduled maintenance<\/strong>: Automate routine tasks like creating backups or purging caches<\/li>\n\n\n\n<li><strong>Bulk operations<\/strong>: Perform actions across multiple sites simultaneously<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><a><\/a>What You Can Do with the API<\/h3>\n\n\n\n<p>The Hosting Platform API allows you to perform a wide range of operations, including:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>List your WP Engine accounts<\/li>\n\n\n\n<li>Manage account users (add, update, delete)<\/li>\n\n\n\n<li>List and manage sites<\/li>\n\n\n\n<li>Manage installs\/environments (add, delete)<\/li>\n\n\n\n<li>Configure domains (add, delete, set primary)<\/li>\n\n\n\n<li>Create backups<\/li>\n\n\n\n<li>Purge caches<\/li>\n\n\n\n<li>Manage SSH keys<\/li>\n<\/ul>\n\n\n\n<p><\/p>\n\n\n\n<p>It\u2019s important to note that some operations are not currently available through the API, such as copying or transferring environments, restoring backups, managing SSL, and several other specialized tasks. For a complete list of supported and unsupported operations, refer to the\u00a0<a href=\"https:\/\/wpengine.com\/support\/enabling-wp-engine-api\/\">WP Engine Hosting Platform API Support Center page<\/a>\u00a0and the\u00a0<a href=\"https:\/\/wpengineapi.com\/\">official documentation<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"getting-started-with-the-wp-engine-api\">Getting Started with the Hosting Platform API<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><a><\/a>Authentication<\/h3>\n\n\n\n<p>The Hosting Platform API uses Basic Authentication. To authenticate your requests, you\u2019ll need to generate API credentials from the WP Engine User Portal.<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Log in to the&nbsp;<a href=\"https:\/\/my.wpengine.com\/\">WP Engine User Portal<\/a><\/li>\n\n\n\n<li>Navigate to API Access in the left sidebar<\/li>\n\n\n\n<li>Click \u201cGenerate Credentials\u201d if you don\u2019t have any<\/li>\n\n\n\n<li>Copy your API username and password<\/li>\n<\/ol>\n\n\n\n<p><\/p>\n\n\n\n<p>These steps are also listed on the\u00a0<a href=\"https:\/\/wpengine.com\/support\/enabling-wp-engine-api\/\">WP Engine Hosting Platform API Support Center page<\/a>.<\/p>\n\n\n\n<p>Your credentials will be used to authenticate all your API requests. Keep them secure, as they provide access to your WP Engine resources.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><a><\/a>Making Your First API Request<\/h3>\n\n\n\n<p>Let\u2019s start with a simple example: retrieving information about the authenticated user. This is a great way to test your API credentials and ensure everything is set up correctly.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript shcb-code-table shcb-line-numbers\"><span class='shcb-loc'><span><span class=\"hljs-comment\">\/\/ user-info.js<\/span>\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-comment\">\/\/ Replace with your actual credentials<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-keyword\">const<\/span> API_USER_ID = <span class=\"hljs-string\">\"your-api-user-id\"<\/span>;\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-keyword\">const<\/span> API_PASSWORD = <span class=\"hljs-string\">\"your-api-password\"<\/span>;\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-comment\">\/\/ Create the authorization header<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-keyword\">const<\/span> auth = Buffer.from(<span class=\"hljs-string\">`<span class=\"hljs-subst\">${API_USER_ID}<\/span>:<span class=\"hljs-subst\">${API_PASSWORD}<\/span>`<\/span>).toString(<span class=\"hljs-string\">\"base64\"<\/span>);\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-keyword\">async<\/span> <span class=\"hljs-function\"><span class=\"hljs-keyword\">function<\/span> <span class=\"hljs-title\">getUserInfo<\/span>(<span class=\"hljs-params\"><\/span>) <\/span>{\n<\/span><\/span><span class='shcb-loc'><span>  <span class=\"hljs-keyword\">try<\/span> {\n<\/span><\/span><span class='shcb-loc'><span>    <span class=\"hljs-keyword\">const<\/span> response = <span class=\"hljs-keyword\">await<\/span> fetch(<span class=\"hljs-string\">\"https:\/\/api.wpengineapi.com\/v1\/user\"<\/span>, {\n<\/span><\/span><span class='shcb-loc'><span>      <span class=\"hljs-attr\">headers<\/span>: { <span class=\"hljs-attr\">Authorization<\/span>: <span class=\"hljs-string\">`Basic <span class=\"hljs-subst\">${auth}<\/span>`<\/span> },\n<\/span><\/span><span class='shcb-loc'><span>    });\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><span class='shcb-loc'><span>    <span class=\"hljs-keyword\">if<\/span> (!response.ok) {\n<\/span><\/span><span class='shcb-loc'><span>      <span class=\"hljs-keyword\">throw<\/span> <span class=\"hljs-keyword\">new<\/span> <span class=\"hljs-built_in\">Error<\/span>(<span class=\"hljs-string\">`HTTP error! status: <span class=\"hljs-subst\">${response.status}<\/span>`<\/span>);\n<\/span><\/span><span class='shcb-loc'><span>    }\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><span class='shcb-loc'><span>    <span class=\"hljs-keyword\">const<\/span> data = <span class=\"hljs-keyword\">await<\/span> response.json();\n<\/span><\/span><span class='shcb-loc'><span>    <span class=\"hljs-built_in\">console<\/span>.log(<span class=\"hljs-string\">\"User Information:\"<\/span>);\n<\/span><\/span><span class='shcb-loc'><span>    <span class=\"hljs-built_in\">console<\/span>.log(<span class=\"hljs-built_in\">JSON<\/span>.stringify(data, <span class=\"hljs-literal\">null<\/span>, <span class=\"hljs-number\">2<\/span>));\n<\/span><\/span><span class='shcb-loc'><span>    <span class=\"hljs-keyword\">return<\/span> data;\n<\/span><\/span><span class='shcb-loc'><span>  } <span class=\"hljs-keyword\">catch<\/span> (error) {\n<\/span><\/span><span class='shcb-loc'><span>    <span class=\"hljs-built_in\">console<\/span>.error(<span class=\"hljs-string\">\"Error fetching user information:\"<\/span>, error);\n<\/span><\/span><span class='shcb-loc'><span>    <span class=\"hljs-keyword\">throw<\/span> error;\n<\/span><\/span><span class='shcb-loc'><span>  }\n<\/span><\/span><span class='shcb-loc'><span>}\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-comment\">\/\/ Execute the function<\/span>\n<\/span><\/span><span class='shcb-loc'><span>getUserInfo();\n<\/span><\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p><\/p>\n\n\n\n<p>To run this code on your local machine, you can:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Create a file called&nbsp;<code>user-info.js<\/code><\/li>\n\n\n\n<li>Paste this code into it<\/li>\n\n\n\n<li>Insert your API credentials<\/li>\n\n\n\n<li>Run it with&nbsp;<code>node user-info.js<\/code>.<\/li>\n<\/ol>\n\n\n\n<p><\/p>\n\n\n\n<p>This script makes a GET request to the&nbsp;<code>\/user<\/code>&nbsp;endpoint, which returns information about the authenticated user. If successful, it will display your user details in the console, like this:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"JSON \/ JSON with Comments\" data-shcb-language-slug=\"json\"><span><code class=\"hljs language-json shcb-code-table shcb-line-numbers\"><span class='shcb-loc'><span>{\n<\/span><\/span><span class='shcb-loc'><span>  <span class=\"hljs-attr\">\"id\"<\/span>: <span class=\"hljs-string\">\"d84kd9f4-2c8w-op38-826x-16zje9c84ngp\"<\/span>,\n<\/span><\/span><span class='shcb-loc'><span>  <span class=\"hljs-attr\">\"email\"<\/span>: <span class=\"hljs-string\">\"walter.p.engine@example.com\"<\/span>,\n<\/span><\/span><span class='shcb-loc'><span>  <span class=\"hljs-attr\">\"first_name\"<\/span>: <span class=\"hljs-string\">\"Walter\"<\/span>,\n<\/span><\/span><span class='shcb-loc'><span>  <span class=\"hljs-attr\">\"last_name\"<\/span>: <span class=\"hljs-string\">\"Engine\"<\/span>,\n<\/span><\/span><span class='shcb-loc'><span>  <span class=\"hljs-attr\">\"phone_number\"<\/span>: <span class=\"hljs-literal\">null<\/span>\n<\/span><\/span><span class='shcb-loc'><span>}\n<\/span><\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JSON \/ JSON with Comments<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">json<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p><\/p>\n\n\n\n<p>NOTE: Your API credentials are sensitive, so be sure never to post them publicly or commit them to version control.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"core-api-functionality\">Core API Functionality<\/h2>\n\n\n\n<p>Now that we\u2019ve covered the basics, let\u2019s explore the core functionality of the Hosting Platform API with practical examples.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><a><\/a>Auth Helper Function<\/h3>\n\n\n\n<p>All of the examples below use a utility function called\u00a0<code>createAuthHeader<\/code>\u00a0to get the API credentials from environment variables and generate the Basic Authentication header for Hosting Platform API requests:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript shcb-code-table shcb-line-numbers\"><span class='shcb-loc'><span><span class=\"hljs-keyword\">import<\/span> dotenv <span class=\"hljs-keyword\">from<\/span> <span class=\"hljs-string\">\"dotenv\"<\/span>;\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-comment\">\/\/ Load environment variables from .env file<\/span>\n<\/span><\/span><span class='shcb-loc'><span>dotenv.config();\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-comment\">\/**<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-comment\"> * Create a Basic Authentication header for Hosting Platform API requests<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-comment\"> * @returns The Base64 encoded authentication string<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-comment\"> *\/<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-keyword\">export<\/span> <span class=\"hljs-function\"><span class=\"hljs-keyword\">function<\/span> <span class=\"hljs-title\">createAuthHeader<\/span>(<span class=\"hljs-params\"><\/span>) <\/span>{\n<\/span><\/span><span class='shcb-loc'><span>  <span class=\"hljs-keyword\">const<\/span> API_USER_ID = process.env.WP_ENGINE_API_USER_ID || <span class=\"hljs-string\">\"\"<\/span>;\n<\/span><\/span><span class='shcb-loc'><span>  <span class=\"hljs-keyword\">const<\/span> API_PASSWORD = process.env.WP_ENGINE_API_PASSWORD || <span class=\"hljs-string\">\"\"<\/span>;\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><span class='shcb-loc'><span>  <span class=\"hljs-keyword\">if<\/span> (!API_USER_ID || !API_PASSWORD) {\n<\/span><\/span><span class='shcb-loc'><span>    <span class=\"hljs-built_in\">console<\/span>.error(\n<\/span><\/span><span class='shcb-loc'><span>      <span class=\"hljs-string\">\"Error: Hosting Platform API credentials not found in environment variables.\"<\/span>\n<\/span><\/span><span class='shcb-loc'><span>    );\n<\/span><\/span><span class='shcb-loc'><span>    <span class=\"hljs-built_in\">console<\/span>.error(\n<\/span><\/span><span class='shcb-loc'><span>      <span class=\"hljs-string\">\"Please create a .env file with WP_ENGINE_API_USER_ID and WP_ENGINE_API_PASSWORD.\"<\/span>\n<\/span><\/span><span class='shcb-loc'><span>    );\n<\/span><\/span><span class='shcb-loc'><span>    process.exit(<span class=\"hljs-number\">1<\/span>);\n<\/span><\/span><span class='shcb-loc'><span>  }\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><span class='shcb-loc'><span>  <span class=\"hljs-comment\">\/\/ Create the authorization header<\/span>\n<\/span><\/span><span class='shcb-loc'><span>  <span class=\"hljs-keyword\">const<\/span> auth = Buffer.from(<span class=\"hljs-string\">`<span class=\"hljs-subst\">${API_USER_ID}<\/span>:<span class=\"hljs-subst\">${API_PASSWORD}<\/span>`<\/span>).toString(<span class=\"hljs-string\">\"base64\"<\/span>);\n<\/span><\/span><span class='shcb-loc'><span>  <span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-string\">`Basic <span class=\"hljs-subst\">${auth}<\/span>`<\/span>;\n<\/span><\/span><span class='shcb-loc'><span>}\n<\/span><\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p><\/p>\n\n\n\n<p>You can set up a similar helper function in your project to generate the auth header for all API requests, if you like.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Account Management<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\"><a><\/a>Listing Accounts<\/h4>\n\n\n\n<p>To retrieve a list of WP Engine accounts that the authenticated user has access to:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript shcb-code-table shcb-line-numbers\"><span class='shcb-loc'><span><span class=\"hljs-keyword\">import<\/span> { createAuthHeader } <span class=\"hljs-keyword\">from<\/span> <span class=\"hljs-string\">\".\/utils.js\"<\/span>;\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-keyword\">async<\/span> <span class=\"hljs-function\"><span class=\"hljs-keyword\">function<\/span> <span class=\"hljs-title\">listAccounts<\/span>(<span class=\"hljs-params\"><\/span>) <\/span>{\n<\/span><\/span><span class='shcb-loc'><span>  <span class=\"hljs-keyword\">try<\/span> {\n<\/span><\/span><span class='shcb-loc'><span>    <span class=\"hljs-keyword\">const<\/span> response = <span class=\"hljs-keyword\">await<\/span> fetch(<span class=\"hljs-string\">\"https:\/\/api.wpengineapi.com\/v1\/accounts\"<\/span>, {\n<\/span><\/span><span class='shcb-loc'><span>      <span class=\"hljs-attr\">headers<\/span>: { <span class=\"hljs-attr\">Authorization<\/span>: createAuthHeader() },\n<\/span><\/span><span class='shcb-loc'><span>    });\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><span class='shcb-loc'><span>    <span class=\"hljs-keyword\">if<\/span> (!response.ok) {\n<\/span><\/span><span class='shcb-loc'><span>      <span class=\"hljs-keyword\">throw<\/span> <span class=\"hljs-keyword\">new<\/span> <span class=\"hljs-built_in\">Error<\/span>(<span class=\"hljs-string\">`HTTP error! status: <span class=\"hljs-subst\">${response.status}<\/span>`<\/span>);\n<\/span><\/span><span class='shcb-loc'><span>    }\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><span class='shcb-loc'><span>    <span class=\"hljs-keyword\">const<\/span> data = <span class=\"hljs-keyword\">await<\/span> response.json();\n<\/span><\/span><span class='shcb-loc'><span>    <span class=\"hljs-built_in\">console<\/span>.log(<span class=\"hljs-string\">\"Accounts:\"<\/span>);\n<\/span><\/span><span class='shcb-loc'><span>    <span class=\"hljs-built_in\">console<\/span>.log(<span class=\"hljs-built_in\">JSON<\/span>.stringify(data, <span class=\"hljs-literal\">null<\/span>, <span class=\"hljs-number\">2<\/span>));\n<\/span><\/span><span class='shcb-loc'><span>    <span class=\"hljs-keyword\">return<\/span> data;\n<\/span><\/span><span class='shcb-loc'><span>  } <span class=\"hljs-keyword\">catch<\/span> (error) {\n<\/span><\/span><span class='shcb-loc'><span>    <span class=\"hljs-built_in\">console<\/span>.error(<span class=\"hljs-string\">\"Error fetching accounts:\"<\/span>, error);\n<\/span><\/span><span class='shcb-loc'><span>    <span class=\"hljs-keyword\">throw<\/span> error;\n<\/span><\/span><span class='shcb-loc'><span>  }\n<\/span><\/span><span class='shcb-loc'><span>}\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><span class='shcb-loc'><span>listAccounts();\n<\/span><\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p><\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Managing Account Users<\/h4>\n\n\n\n<p>You can add, update, or remove users from your WP Engine account:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-5\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript shcb-code-table shcb-line-numbers\"><span class='shcb-loc'><span><span class=\"hljs-keyword\">import<\/span> { createAuthHeader } <span class=\"hljs-keyword\">from<\/span> <span class=\"hljs-string\">\".\/utils.js\"<\/span>;\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-keyword\">async<\/span> <span class=\"hljs-function\"><span class=\"hljs-keyword\">function<\/span> <span class=\"hljs-title\">addAccountUser<\/span>(<span class=\"hljs-params\">accountId, email, role<\/span>) <\/span>{\n<\/span><\/span><span class='shcb-loc'><span>  <span class=\"hljs-keyword\">try<\/span> {\n<\/span><\/span><span class='shcb-loc'><span>    <span class=\"hljs-keyword\">const<\/span> response = <span class=\"hljs-keyword\">await<\/span> fetch(\n<\/span><\/span><span class='shcb-loc'><span>      <span class=\"hljs-string\">`https:\/\/api.wpengineapi.com\/v1\/accounts\/<span class=\"hljs-subst\">${accountId}<\/span>\/users`<\/span>,\n<\/span><\/span><span class='shcb-loc'><span>      {\n<\/span><\/span><span class='shcb-loc'><span>        <span class=\"hljs-attr\">method<\/span>: <span class=\"hljs-string\">\"POST\"<\/span>,\n<\/span><\/span><span class='shcb-loc'><span>        <span class=\"hljs-attr\">headers<\/span>: {\n<\/span><\/span><span class='shcb-loc'><span>          <span class=\"hljs-attr\">Authorization<\/span>: createAuthHeader(),\n<\/span><\/span><span class='shcb-loc'><span>          <span class=\"hljs-string\">\"Content-Type\"<\/span>: <span class=\"hljs-string\">\"application\/json\"<\/span>,\n<\/span><\/span><span class='shcb-loc'><span>        },\n<\/span><\/span><span class='shcb-loc'><span>        <span class=\"hljs-attr\">body<\/span>: <span class=\"hljs-built_in\">JSON<\/span>.stringify({\n<\/span><\/span><span class='shcb-loc'><span>          email,\n<\/span><\/span><span class='shcb-loc'><span>          role, <span class=\"hljs-comment\">\/\/ 'admin', 'developer', 'sftp', 'billing', 'support', 'partial'<\/span>\n<\/span><\/span><span class='shcb-loc'><span>        }),\n<\/span><\/span><span class='shcb-loc'><span>      }\n<\/span><\/span><span class='shcb-loc'><span>    );\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><span class='shcb-loc'><span>    <span class=\"hljs-keyword\">if<\/span> (!response.ok) {\n<\/span><\/span><span class='shcb-loc'><span>      <span class=\"hljs-keyword\">throw<\/span> <span class=\"hljs-keyword\">new<\/span> <span class=\"hljs-built_in\">Error<\/span>(<span class=\"hljs-string\">`HTTP error! status: <span class=\"hljs-subst\">${response.status}<\/span>`<\/span>);\n<\/span><\/span><span class='shcb-loc'><span>    }\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><span class='shcb-loc'><span>    <span class=\"hljs-keyword\">const<\/span> data = <span class=\"hljs-keyword\">await<\/span> response.json();\n<\/span><\/span><span class='shcb-loc'><span>    <span class=\"hljs-built_in\">console<\/span>.log(<span class=\"hljs-string\">\"User added successfully:\"<\/span>);\n<\/span><\/span><span class='shcb-loc'><span>    <span class=\"hljs-built_in\">console<\/span>.log(<span class=\"hljs-built_in\">JSON<\/span>.stringify(data, <span class=\"hljs-literal\">null<\/span>, <span class=\"hljs-number\">2<\/span>));\n<\/span><\/span><span class='shcb-loc'><span>    <span class=\"hljs-keyword\">return<\/span> data;\n<\/span><\/span><span class='shcb-loc'><span>  } <span class=\"hljs-keyword\">catch<\/span> (error) {\n<\/span><\/span><span class='shcb-loc'><span>    <span class=\"hljs-built_in\">console<\/span>.error(<span class=\"hljs-string\">\"Error adding user:\"<\/span>, error);\n<\/span><\/span><span class='shcb-loc'><span>    <span class=\"hljs-keyword\">throw<\/span> error;\n<\/span><\/span><span class='shcb-loc'><span>  }\n<\/span><\/span><span class='shcb-loc'><span>}\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-comment\">\/\/ Example usage<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-comment\">\/\/ addAccountUser('your-account-id', 'newuser@example.com', 'developer');<\/span>\n<\/span><\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-5\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Site Management<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\"><a><\/a>Listing Sites<\/h4>\n\n\n\n<p>To retrieve a list of sites associated with your account:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-6\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript shcb-code-table shcb-line-numbers\"><span class='shcb-loc'><span><span class=\"hljs-keyword\">import<\/span> { createAuthHeader } <span class=\"hljs-keyword\">from<\/span> <span class=\"hljs-string\">\".\/utils.js\"<\/span>;\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-keyword\">async<\/span> <span class=\"hljs-function\"><span class=\"hljs-keyword\">function<\/span> <span class=\"hljs-title\">listSites<\/span>(<span class=\"hljs-params\"><\/span>) <\/span>{\n<\/span><\/span><span class='shcb-loc'><span>  <span class=\"hljs-keyword\">try<\/span> {\n<\/span><\/span><span class='shcb-loc'><span>    <span class=\"hljs-keyword\">const<\/span> response = <span class=\"hljs-keyword\">await<\/span> fetch(<span class=\"hljs-string\">\"https:\/\/api.wpengineapi.com\/v1\/sites\"<\/span>, {\n<\/span><\/span><span class='shcb-loc'><span>      <span class=\"hljs-attr\">headers<\/span>: { <span class=\"hljs-attr\">Authorization<\/span>: createAuthHeader() },\n<\/span><\/span><span class='shcb-loc'><span>    });\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><span class='shcb-loc'><span>    <span class=\"hljs-keyword\">if<\/span> (!response.ok) {\n<\/span><\/span><span class='shcb-loc'><span>      <span class=\"hljs-keyword\">throw<\/span> <span class=\"hljs-keyword\">new<\/span> <span class=\"hljs-built_in\">Error<\/span>(<span class=\"hljs-string\">`HTTP error! status: <span class=\"hljs-subst\">${response.status}<\/span>`<\/span>);\n<\/span><\/span><span class='shcb-loc'><span>    }\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><span class='shcb-loc'><span>    <span class=\"hljs-keyword\">const<\/span> data = <span class=\"hljs-keyword\">await<\/span> response.json();\n<\/span><\/span><span class='shcb-loc'><span>    <span class=\"hljs-built_in\">console<\/span>.log(<span class=\"hljs-string\">\"Sites:\"<\/span>);\n<\/span><\/span><span class='shcb-loc'><span>    <span class=\"hljs-built_in\">console<\/span>.log(<span class=\"hljs-built_in\">JSON<\/span>.stringify(data, <span class=\"hljs-literal\">null<\/span>, <span class=\"hljs-number\">2<\/span>));\n<\/span><\/span><span class='shcb-loc'><span>    <span class=\"hljs-keyword\">return<\/span> data;\n<\/span><\/span><span class='shcb-loc'><span>  } <span class=\"hljs-keyword\">catch<\/span> (error) {\n<\/span><\/span><span class='shcb-loc'><span>    <span class=\"hljs-built_in\">console<\/span>.error(<span class=\"hljs-string\">\"Error fetching sites:\"<\/span>, error);\n<\/span><\/span><span class='shcb-loc'><span>    <span class=\"hljs-keyword\">throw<\/span> error;\n<\/span><\/span><span class='shcb-loc'><span>  }\n<\/span><\/span><span class='shcb-loc'><span>}\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><span class='shcb-loc'><span>listSites();\n<\/span><\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-6\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p><\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Creating a New Site<\/h4>\n\n\n\n<p>To create a new site on WP Engine:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-7\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript shcb-code-table shcb-line-numbers\"><span class='shcb-loc'><span><span class=\"hljs-keyword\">import<\/span> { createAuthHeader } <span class=\"hljs-keyword\">from<\/span> <span class=\"hljs-string\">\".\/utils.js\"<\/span>;\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-keyword\">async<\/span> <span class=\"hljs-function\"><span class=\"hljs-keyword\">function<\/span> <span class=\"hljs-title\">createSite<\/span>(<span class=\"hljs-params\">name<\/span>) <\/span>{\n<\/span><\/span><span class='shcb-loc'><span>  <span class=\"hljs-keyword\">try<\/span> {\n<\/span><\/span><span class='shcb-loc'><span>    <span class=\"hljs-keyword\">const<\/span> response = <span class=\"hljs-keyword\">await<\/span> fetch(<span class=\"hljs-string\">\"https:\/\/api.wpengineapi.com\/v1\/sites\"<\/span>, {\n<\/span><\/span><span class='shcb-loc'><span>      <span class=\"hljs-attr\">method<\/span>: <span class=\"hljs-string\">\"POST\"<\/span>,\n<\/span><\/span><span class='shcb-loc'><span>      <span class=\"hljs-attr\">headers<\/span>: {\n<\/span><\/span><span class='shcb-loc'><span>        <span class=\"hljs-attr\">Authorization<\/span>: createAuthHeader(),\n<\/span><\/span><span class='shcb-loc'><span>        <span class=\"hljs-string\">\"Content-Type\"<\/span>: <span class=\"hljs-string\">\"application\/json\"<\/span>,\n<\/span><\/span><span class='shcb-loc'><span>      },\n<\/span><\/span><span class='shcb-loc'><span>      <span class=\"hljs-attr\">body<\/span>: <span class=\"hljs-built_in\">JSON<\/span>.stringify({ name }),\n<\/span><\/span><span class='shcb-loc'><span>    });\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><span class='shcb-loc'><span>    <span class=\"hljs-keyword\">if<\/span> (!response.ok) {\n<\/span><\/span><span class='shcb-loc'><span>      <span class=\"hljs-keyword\">throw<\/span> <span class=\"hljs-keyword\">new<\/span> <span class=\"hljs-built_in\">Error<\/span>(<span class=\"hljs-string\">`HTTP error! status: <span class=\"hljs-subst\">${response.status}<\/span>`<\/span>);\n<\/span><\/span><span class='shcb-loc'><span>    }\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><span class='shcb-loc'><span>    <span class=\"hljs-keyword\">const<\/span> data = <span class=\"hljs-keyword\">await<\/span> response.json();\n<\/span><\/span><span class='shcb-loc'><span>    <span class=\"hljs-built_in\">console<\/span>.log(<span class=\"hljs-string\">\"Site created successfully:\"<\/span>);\n<\/span><\/span><span class='shcb-loc'><span>    <span class=\"hljs-built_in\">console<\/span>.log(<span class=\"hljs-built_in\">JSON<\/span>.stringify(data, <span class=\"hljs-literal\">null<\/span>, <span class=\"hljs-number\">2<\/span>));\n<\/span><\/span><span class='shcb-loc'><span>    <span class=\"hljs-keyword\">return<\/span> data;\n<\/span><\/span><span class='shcb-loc'><span>  } <span class=\"hljs-keyword\">catch<\/span> (error) {\n<\/span><\/span><span class='shcb-loc'><span>    <span class=\"hljs-built_in\">console<\/span>.error(<span class=\"hljs-string\">\"Error creating site:\"<\/span>, error);\n<\/span><\/span><span class='shcb-loc'><span>    <span class=\"hljs-keyword\">throw<\/span> error;\n<\/span><\/span><span class='shcb-loc'><span>  }\n<\/span><\/span><span class='shcb-loc'><span>}\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-comment\">\/\/ Example usage<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-comment\">\/\/ createSite('my-new-site');<\/span>\n<\/span><\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-7\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Install (Environment) Management<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\"><a><\/a>Listing Installs<\/h4>\n\n\n\n<p>To retrieve a list of installs (environments) associated with your account:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-8\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript shcb-code-table shcb-line-numbers\"><span class='shcb-loc'><span><span class=\"hljs-keyword\">import<\/span> { createAuthHeader } <span class=\"hljs-keyword\">from<\/span> <span class=\"hljs-string\">\".\/utils.js\"<\/span>;\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-keyword\">async<\/span> <span class=\"hljs-function\"><span class=\"hljs-keyword\">function<\/span> <span class=\"hljs-title\">listInstalls<\/span>(<span class=\"hljs-params\"><\/span>) <\/span>{\n<\/span><\/span><span class='shcb-loc'><span>  <span class=\"hljs-keyword\">try<\/span> {\n<\/span><\/span><span class='shcb-loc'><span>    <span class=\"hljs-keyword\">const<\/span> response = <span class=\"hljs-keyword\">await<\/span> fetch(<span class=\"hljs-string\">\"https:\/\/api.wpengineapi.com\/v1\/installs\"<\/span>, {\n<\/span><\/span><span class='shcb-loc'><span>      <span class=\"hljs-attr\">headers<\/span>: { <span class=\"hljs-attr\">Authorization<\/span>: createAuthHeader() },\n<\/span><\/span><span class='shcb-loc'><span>    });\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><span class='shcb-loc'><span>    <span class=\"hljs-keyword\">if<\/span> (!response.ok) {\n<\/span><\/span><span class='shcb-loc'><span>      <span class=\"hljs-keyword\">throw<\/span> <span class=\"hljs-keyword\">new<\/span> <span class=\"hljs-built_in\">Error<\/span>(<span class=\"hljs-string\">`HTTP error! status: <span class=\"hljs-subst\">${response.status}<\/span>`<\/span>);\n<\/span><\/span><span class='shcb-loc'><span>    }\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><span class='shcb-loc'><span>    <span class=\"hljs-keyword\">const<\/span> data = <span class=\"hljs-keyword\">await<\/span> response.json();\n<\/span><\/span><span class='shcb-loc'><span>    <span class=\"hljs-built_in\">console<\/span>.log(<span class=\"hljs-string\">\"Installs:\"<\/span>);\n<\/span><\/span><span class='shcb-loc'><span>    <span class=\"hljs-built_in\">console<\/span>.log(<span class=\"hljs-built_in\">JSON<\/span>.stringify(data, <span class=\"hljs-literal\">null<\/span>, <span class=\"hljs-number\">2<\/span>));\n<\/span><\/span><span class='shcb-loc'><span>    <span class=\"hljs-keyword\">return<\/span> data;\n<\/span><\/span><span class='shcb-loc'><span>  } <span class=\"hljs-keyword\">catch<\/span> (error) {\n<\/span><\/span><span class='shcb-loc'><span>    <span class=\"hljs-built_in\">console<\/span>.error(<span class=\"hljs-string\">\"Error fetching installs:\"<\/span>, error);\n<\/span><\/span><span class='shcb-loc'><span>    <span class=\"hljs-keyword\">throw<\/span> error;\n<\/span><\/span><span class='shcb-loc'><span>  }\n<\/span><\/span><span class='shcb-loc'><span>}\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><span class='shcb-loc'><span>listInstalls();\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-8\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h4 class=\"wp-block-heading\"><a><\/a>Creating a New Install<\/h4>\n\n\n\n<p>To create a new install (environment) on WP Engine:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-9\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript shcb-code-table shcb-line-numbers\"><span class='shcb-loc'><span><span class=\"hljs-keyword\">import<\/span> { createAuthHeader } <span class=\"hljs-keyword\">from<\/span> <span class=\"hljs-string\">\".\/utils.js\"<\/span>;\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-keyword\">async<\/span> <span class=\"hljs-function\"><span class=\"hljs-keyword\">function<\/span> <span class=\"hljs-title\">createInstall<\/span>(<span class=\"hljs-params\">siteId, name, environment<\/span>) <\/span>{\n<\/span><\/span><span class='shcb-loc'><span>  <span class=\"hljs-keyword\">try<\/span> {\n<\/span><\/span><span class='shcb-loc'><span>    <span class=\"hljs-keyword\">const<\/span> response = <span class=\"hljs-keyword\">await<\/span> fetch(<span class=\"hljs-string\">\"https:\/\/api.wpengineapi.com\/v1\/installs\"<\/span>, {\n<\/span><\/span><span class='shcb-loc'><span>      <span class=\"hljs-attr\">method<\/span>: <span class=\"hljs-string\">\"POST\"<\/span>,\n<\/span><\/span><span class='shcb-loc'><span>      <span class=\"hljs-attr\">headers<\/span>: {\n<\/span><\/span><span class='shcb-loc'><span>        <span class=\"hljs-attr\">Authorization<\/span>: createAuthHeader(),\n<\/span><\/span><span class='shcb-loc'><span>        <span class=\"hljs-string\">\"Content-Type\"<\/span>: <span class=\"hljs-string\">\"application\/json\"<\/span>,\n<\/span><\/span><span class='shcb-loc'><span>      },\n<\/span><\/span><span class='shcb-loc'><span>      <span class=\"hljs-attr\">body<\/span>: <span class=\"hljs-built_in\">JSON<\/span>.stringify({\n<\/span><\/span><span class='shcb-loc'><span>        <span class=\"hljs-attr\">site_id<\/span>: siteId,\n<\/span><\/span><span class='shcb-loc'><span>        name,\n<\/span><\/span><span class='shcb-loc'><span>        environment, <span class=\"hljs-comment\">\/\/ 'production', 'staging', 'development'<\/span>\n<\/span><\/span><span class='shcb-loc'><span>      }),\n<\/span><\/span><span class='shcb-loc'><span>    });\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><span class='shcb-loc'><span>    <span class=\"hljs-keyword\">if<\/span> (!response.ok) {\n<\/span><\/span><span class='shcb-loc'><span>      <span class=\"hljs-keyword\">throw<\/span> <span class=\"hljs-keyword\">new<\/span> <span class=\"hljs-built_in\">Error<\/span>(<span class=\"hljs-string\">`HTTP error! status: <span class=\"hljs-subst\">${response.status}<\/span>`<\/span>);\n<\/span><\/span><span class='shcb-loc'><span>    }\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><span class='shcb-loc'><span>    <span class=\"hljs-keyword\">const<\/span> data = <span class=\"hljs-keyword\">await<\/span> response.json();\n<\/span><\/span><span class='shcb-loc'><span>    <span class=\"hljs-built_in\">console<\/span>.log(<span class=\"hljs-string\">\"Install created successfully:\"<\/span>);\n<\/span><\/span><span class='shcb-loc'><span>    <span class=\"hljs-built_in\">console<\/span>.log(<span class=\"hljs-built_in\">JSON<\/span>.stringify(data, <span class=\"hljs-literal\">null<\/span>, <span class=\"hljs-number\">2<\/span>));\n<\/span><\/span><span class='shcb-loc'><span>    <span class=\"hljs-keyword\">return<\/span> data;\n<\/span><\/span><span class='shcb-loc'><span>  } <span class=\"hljs-keyword\">catch<\/span> (error) {\n<\/span><\/span><span class='shcb-loc'><span>    <span class=\"hljs-built_in\">console<\/span>.error(<span class=\"hljs-string\">\"Error creating install:\"<\/span>, error);\n<\/span><\/span><span class='shcb-loc'><span>    <span class=\"hljs-keyword\">throw<\/span> error;\n<\/span><\/span><span class='shcb-loc'><span>  }\n<\/span><\/span><span class='shcb-loc'><span>}\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-comment\">\/\/ Example usage<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-comment\">\/\/ createInstall('your-site-id', 'my-new-install', 'staging');<\/span>\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-9\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h3 class=\"wp-block-heading\"><a><\/a>Domain Management<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\"><a><\/a>Listing Domains<\/h4>\n\n\n\n<p>To retrieve a list of domains associated with an install:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-10\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript shcb-code-table shcb-line-numbers\"><span class='shcb-loc'><span><span class=\"hljs-keyword\">import<\/span> { createAuthHeader } <span class=\"hljs-keyword\">from<\/span> <span class=\"hljs-string\">\".\/utils.js\"<\/span>;\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-keyword\">async<\/span> <span class=\"hljs-function\"><span class=\"hljs-keyword\">function<\/span> <span class=\"hljs-title\">listDomains<\/span>(<span class=\"hljs-params\">installId<\/span>) <\/span>{\n<\/span><\/span><span class='shcb-loc'><span>  <span class=\"hljs-keyword\">try<\/span> {\n<\/span><\/span><span class='shcb-loc'><span>    <span class=\"hljs-keyword\">const<\/span> response = <span class=\"hljs-keyword\">await<\/span> fetch(\n<\/span><\/span><span class='shcb-loc'><span>      <span class=\"hljs-string\">`https:\/\/api.wpengineapi.com\/v1\/installs\/<span class=\"hljs-subst\">${installId}<\/span>\/domains`<\/span>,\n<\/span><\/span><span class='shcb-loc'><span>      {\n<\/span><\/span><span class='shcb-loc'><span>        <span class=\"hljs-attr\">headers<\/span>: { <span class=\"hljs-attr\">Authorization<\/span>: createAuthHeader() },\n<\/span><\/span><span class='shcb-loc'><span>      }\n<\/span><\/span><span class='shcb-loc'><span>    );\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><span class='shcb-loc'><span>    <span class=\"hljs-keyword\">if<\/span> (!response.ok) {\n<\/span><\/span><span class='shcb-loc'><span>      <span class=\"hljs-keyword\">throw<\/span> <span class=\"hljs-keyword\">new<\/span> <span class=\"hljs-built_in\">Error<\/span>(<span class=\"hljs-string\">`HTTP error! status: <span class=\"hljs-subst\">${response.status}<\/span>`<\/span>);\n<\/span><\/span><span class='shcb-loc'><span>    }\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><span class='shcb-loc'><span>    <span class=\"hljs-keyword\">const<\/span> data = <span class=\"hljs-keyword\">await<\/span> response.json();\n<\/span><\/span><span class='shcb-loc'><span>    <span class=\"hljs-built_in\">console<\/span>.log(<span class=\"hljs-string\">\"Domains:\"<\/span>);\n<\/span><\/span><span class='shcb-loc'><span>    <span class=\"hljs-built_in\">console<\/span>.log(<span class=\"hljs-built_in\">JSON<\/span>.stringify(data, <span class=\"hljs-literal\">null<\/span>, <span class=\"hljs-number\">2<\/span>));\n<\/span><\/span><span class='shcb-loc'><span>    <span class=\"hljs-keyword\">return<\/span> data;\n<\/span><\/span><span class='shcb-loc'><span>  } <span class=\"hljs-keyword\">catch<\/span> (error) {\n<\/span><\/span><span class='shcb-loc'><span>    <span class=\"hljs-built_in\">console<\/span>.error(<span class=\"hljs-string\">\"Error fetching domains:\"<\/span>, error);\n<\/span><\/span><span class='shcb-loc'><span>    <span class=\"hljs-keyword\">throw<\/span> error;\n<\/span><\/span><span class='shcb-loc'><span>  }\n<\/span><\/span><span class='shcb-loc'><span>}\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-comment\">\/\/ Example usage<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-comment\">\/\/ listDomains('your-install-id');<\/span>\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-10\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h4 class=\"wp-block-heading\"><a><\/a>Adding a Domain<\/h4>\n\n\n\n<p>To add a new domain to an install:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-11\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript shcb-code-table shcb-line-numbers\"><span class='shcb-loc'><span><span class=\"hljs-keyword\">import<\/span> { createAuthHeader } <span class=\"hljs-keyword\">from<\/span> <span class=\"hljs-string\">\".\/utils.js\"<\/span>;\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-keyword\">async<\/span> <span class=\"hljs-function\"><span class=\"hljs-keyword\">function<\/span> <span class=\"hljs-title\">addDomain<\/span>(<span class=\"hljs-params\">installId, name, primary = false<\/span>) <\/span>{\n<\/span><\/span><span class='shcb-loc'><span>  <span class=\"hljs-keyword\">try<\/span> {\n<\/span><\/span><span class='shcb-loc'><span>    <span class=\"hljs-keyword\">const<\/span> response = <span class=\"hljs-keyword\">await<\/span> fetch(\n<\/span><\/span><span class='shcb-loc'><span>      <span class=\"hljs-string\">`https:\/\/api.wpengineapi.com\/v1\/installs\/<span class=\"hljs-subst\">${installId}<\/span>\/domains`<\/span>,\n<\/span><\/span><span class='shcb-loc'><span>      {\n<\/span><\/span><span class='shcb-loc'><span>        <span class=\"hljs-attr\">method<\/span>: <span class=\"hljs-string\">\"POST\"<\/span>,\n<\/span><\/span><span class='shcb-loc'><span>        <span class=\"hljs-attr\">headers<\/span>: {\n<\/span><\/span><span class='shcb-loc'><span>          <span class=\"hljs-attr\">Authorization<\/span>: createAuthHeader(),\n<\/span><\/span><span class='shcb-loc'><span>          <span class=\"hljs-string\">\"Content-Type\"<\/span>: <span class=\"hljs-string\">\"application\/json\"<\/span>,\n<\/span><\/span><span class='shcb-loc'><span>        },\n<\/span><\/span><span class='shcb-loc'><span>        <span class=\"hljs-attr\">body<\/span>: <span class=\"hljs-built_in\">JSON<\/span>.stringify({\n<\/span><\/span><span class='shcb-loc'><span>          name,\n<\/span><\/span><span class='shcb-loc'><span>          primary,\n<\/span><\/span><span class='shcb-loc'><span>        }),\n<\/span><\/span><span class='shcb-loc'><span>      }\n<\/span><\/span><span class='shcb-loc'><span>    );\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><span class='shcb-loc'><span>    <span class=\"hljs-keyword\">if<\/span> (!response.ok) {\n<\/span><\/span><span class='shcb-loc'><span>      <span class=\"hljs-keyword\">throw<\/span> <span class=\"hljs-keyword\">new<\/span> <span class=\"hljs-built_in\">Error<\/span>(<span class=\"hljs-string\">`HTTP error! status: <span class=\"hljs-subst\">${response.status}<\/span>`<\/span>);\n<\/span><\/span><span class='shcb-loc'><span>    }\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><span class='shcb-loc'><span>    <span class=\"hljs-keyword\">const<\/span> data = <span class=\"hljs-keyword\">await<\/span> response.json();\n<\/span><\/span><span class='shcb-loc'><span>    <span class=\"hljs-built_in\">console<\/span>.log(<span class=\"hljs-string\">\"Domain added successfully:\"<\/span>);\n<\/span><\/span><span class='shcb-loc'><span>    <span class=\"hljs-built_in\">console<\/span>.log(<span class=\"hljs-built_in\">JSON<\/span>.stringify(data, <span class=\"hljs-literal\">null<\/span>, <span class=\"hljs-number\">2<\/span>));\n<\/span><\/span><span class='shcb-loc'><span>    <span class=\"hljs-keyword\">return<\/span> data;\n<\/span><\/span><span class='shcb-loc'><span>  } <span class=\"hljs-keyword\">catch<\/span> (error) {\n<\/span><\/span><span class='shcb-loc'><span>    <span class=\"hljs-built_in\">console<\/span>.error(<span class=\"hljs-string\">\"Error adding domain:\"<\/span>, error);\n<\/span><\/span><span class='shcb-loc'><span>    <span class=\"hljs-keyword\">throw<\/span> error;\n<\/span><\/span><span class='shcb-loc'><span>  }\n<\/span><\/span><span class='shcb-loc'><span>}\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-comment\">\/\/ Example usage<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-comment\">\/\/ addDomain('your-install-id', 'example.com', true);<\/span>\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-11\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h3 class=\"wp-block-heading\"><a><\/a>Backup Management<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\"><a><\/a>Creating a Backup<\/h4>\n\n\n\n<p>To create a backup of an install:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-12\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript shcb-code-table shcb-line-numbers\"><span class='shcb-loc'><span><span class=\"hljs-keyword\">import<\/span> { createAuthHeader } <span class=\"hljs-keyword\">from<\/span> <span class=\"hljs-string\">\".\/utils.js\"<\/span>;\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-keyword\">async<\/span> <span class=\"hljs-function\"><span class=\"hljs-keyword\">function<\/span> <span class=\"hljs-title\">createBackup<\/span>(<span class=\"hljs-params\">installId, description<\/span>) <\/span>{\n<\/span><\/span><span class='shcb-loc'><span>  <span class=\"hljs-keyword\">try<\/span> {\n<\/span><\/span><span class='shcb-loc'><span>    <span class=\"hljs-keyword\">const<\/span> response = <span class=\"hljs-keyword\">await<\/span> fetch(\n<\/span><\/span><span class='shcb-loc'><span>      <span class=\"hljs-string\">`https:\/\/api.wpengineapi.com\/v1\/installs\/<span class=\"hljs-subst\">${installId}<\/span>\/backups`<\/span>,\n<\/span><\/span><span class='shcb-loc'><span>      {\n<\/span><\/span><span class='shcb-loc'><span>        <span class=\"hljs-attr\">method<\/span>: <span class=\"hljs-string\">\"POST\"<\/span>,\n<\/span><\/span><span class='shcb-loc'><span>        <span class=\"hljs-attr\">headers<\/span>: {\n<\/span><\/span><span class='shcb-loc'><span>          <span class=\"hljs-attr\">Authorization<\/span>: createAuthHeader(),\n<\/span><\/span><span class='shcb-loc'><span>          <span class=\"hljs-string\">\"Content-Type\"<\/span>: <span class=\"hljs-string\">\"application\/json\"<\/span>,\n<\/span><\/span><span class='shcb-loc'><span>        },\n<\/span><\/span><span class='shcb-loc'><span>        <span class=\"hljs-attr\">body<\/span>: <span class=\"hljs-built_in\">JSON<\/span>.stringify({ description }),\n<\/span><\/span><span class='shcb-loc'><span>      }\n<\/span><\/span><span class='shcb-loc'><span>    );\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><span class='shcb-loc'><span>    <span class=\"hljs-keyword\">if<\/span> (!response.ok) {\n<\/span><\/span><span class='shcb-loc'><span>      <span class=\"hljs-keyword\">throw<\/span> <span class=\"hljs-keyword\">new<\/span> <span class=\"hljs-built_in\">Error<\/span>(<span class=\"hljs-string\">`HTTP error! status: <span class=\"hljs-subst\">${response.status}<\/span>`<\/span>);\n<\/span><\/span><span class='shcb-loc'><span>    }\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><span class='shcb-loc'><span>    <span class=\"hljs-keyword\">const<\/span> data = <span class=\"hljs-keyword\">await<\/span> response.json();\n<\/span><\/span><span class='shcb-loc'><span>    <span class=\"hljs-built_in\">console<\/span>.log(<span class=\"hljs-string\">\"Backup created successfully:\"<\/span>);\n<\/span><\/span><span class='shcb-loc'><span>    <span class=\"hljs-built_in\">console<\/span>.log(<span class=\"hljs-built_in\">JSON<\/span>.stringify(data, <span class=\"hljs-literal\">null<\/span>, <span class=\"hljs-number\">2<\/span>));\n<\/span><\/span><span class='shcb-loc'><span>    <span class=\"hljs-keyword\">return<\/span> data;\n<\/span><\/span><span class='shcb-loc'><span>  } <span class=\"hljs-keyword\">catch<\/span> (error) {\n<\/span><\/span><span class='shcb-loc'><span>    <span class=\"hljs-built_in\">console<\/span>.error(<span class=\"hljs-string\">\"Error creating backup:\"<\/span>, error);\n<\/span><\/span><span class='shcb-loc'><span>    <span class=\"hljs-keyword\">throw<\/span> error;\n<\/span><\/span><span class='shcb-loc'><span>  }\n<\/span><\/span><span class='shcb-loc'><span>}\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-comment\">\/\/ Example usage<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-comment\">\/\/ createBackup('your-install-id', 'Pre-deployment backup');<\/span>\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-12\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h4 class=\"wp-block-heading\"><a><\/a>Listing Backups<\/h4>\n\n\n\n<p>To retrieve a list of backups for an install:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-13\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript shcb-code-table shcb-line-numbers\"><span class='shcb-loc'><span><span class=\"hljs-keyword\">import<\/span> { createAuthHeader } <span class=\"hljs-keyword\">from<\/span> <span class=\"hljs-string\">\".\/utils.js\"<\/span>;\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-keyword\">async<\/span> <span class=\"hljs-function\"><span class=\"hljs-keyword\">function<\/span> <span class=\"hljs-title\">listBackups<\/span>(<span class=\"hljs-params\">installId<\/span>) <\/span>{\n<\/span><\/span><span class='shcb-loc'><span>  <span class=\"hljs-keyword\">try<\/span> {\n<\/span><\/span><span class='shcb-loc'><span>    <span class=\"hljs-keyword\">const<\/span> response = <span class=\"hljs-keyword\">await<\/span> fetch(\n<\/span><\/span><span class='shcb-loc'><span>      <span class=\"hljs-string\">`https:\/\/api.wpengineapi.com\/v1\/installs\/<span class=\"hljs-subst\">${installId}<\/span>\/backups`<\/span>,\n<\/span><\/span><span class='shcb-loc'><span>      {\n<\/span><\/span><span class='shcb-loc'><span>        <span class=\"hljs-attr\">headers<\/span>: { <span class=\"hljs-attr\">Authorization<\/span>: createAuthHeader() },\n<\/span><\/span><span class='shcb-loc'><span>      }\n<\/span><\/span><span class='shcb-loc'><span>    );\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><span class='shcb-loc'><span>    <span class=\"hljs-keyword\">if<\/span> (!response.ok) {\n<\/span><\/span><span class='shcb-loc'><span>      <span class=\"hljs-keyword\">throw<\/span> <span class=\"hljs-keyword\">new<\/span> <span class=\"hljs-built_in\">Error<\/span>(<span class=\"hljs-string\">`HTTP error! status: <span class=\"hljs-subst\">${response.status}<\/span>`<\/span>);\n<\/span><\/span><span class='shcb-loc'><span>    }\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><span class='shcb-loc'><span>    <span class=\"hljs-keyword\">const<\/span> data = <span class=\"hljs-keyword\">await<\/span> response.json();\n<\/span><\/span><span class='shcb-loc'><span>    <span class=\"hljs-built_in\">console<\/span>.log(<span class=\"hljs-string\">\"Backups:\"<\/span>);\n<\/span><\/span><span class='shcb-loc'><span>    <span class=\"hljs-built_in\">console<\/span>.log(<span class=\"hljs-built_in\">JSON<\/span>.stringify(data, <span class=\"hljs-literal\">null<\/span>, <span class=\"hljs-number\">2<\/span>));\n<\/span><\/span><span class='shcb-loc'><span>    <span class=\"hljs-keyword\">return<\/span> data;\n<\/span><\/span><span class='shcb-loc'><span>  } <span class=\"hljs-keyword\">catch<\/span> (error) {\n<\/span><\/span><span class='shcb-loc'><span>    <span class=\"hljs-built_in\">console<\/span>.error(<span class=\"hljs-string\">\"Error fetching backups:\"<\/span>, error);\n<\/span><\/span><span class='shcb-loc'><span>    <span class=\"hljs-keyword\">throw<\/span> error;\n<\/span><\/span><span class='shcb-loc'><span>  }\n<\/span><\/span><span class='shcb-loc'><span>}\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-comment\">\/\/ Example usage<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-comment\">\/\/ listBackups('your-install-id');<\/span>\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-13\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h3 class=\"wp-block-heading\"><a><\/a>Cache Management<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\"><a><\/a>Purging Cache<\/h4>\n\n\n\n<p>To purge the cache for an install:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-14\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript shcb-code-table shcb-line-numbers\"><span class='shcb-loc'><span><span class=\"hljs-keyword\">import<\/span> { createAuthHeader } <span class=\"hljs-keyword\">from<\/span> <span class=\"hljs-string\">\".\/utils.js\"<\/span>;\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-keyword\">async<\/span> <span class=\"hljs-function\"><span class=\"hljs-keyword\">function<\/span> <span class=\"hljs-title\">purgeCache<\/span>(<span class=\"hljs-params\">installId, type = <span class=\"hljs-string\">\"all\"<\/span><\/span>) <\/span>{\n<\/span><\/span><span class='shcb-loc'><span>  <span class=\"hljs-keyword\">try<\/span> {\n<\/span><\/span><span class='shcb-loc'><span>    <span class=\"hljs-keyword\">const<\/span> response = <span class=\"hljs-keyword\">await<\/span> fetch(\n<\/span><\/span><span class='shcb-loc'><span>      <span class=\"hljs-string\">`https:\/\/api.wpengineapi.com\/v1\/installs\/<span class=\"hljs-subst\">${installId}<\/span>\/caches\/<span class=\"hljs-subst\">${type}<\/span>`<\/span>,\n<\/span><\/span><span class='shcb-loc'><span>      {\n<\/span><\/span><span class='shcb-loc'><span>        <span class=\"hljs-attr\">method<\/span>: <span class=\"hljs-string\">\"POST\"<\/span>,\n<\/span><\/span><span class='shcb-loc'><span>        <span class=\"hljs-attr\">headers<\/span>: {\n<\/span><\/span><span class='shcb-loc'><span>          <span class=\"hljs-attr\">Authorization<\/span>: createAuthHeader(),\n<\/span><\/span><span class='shcb-loc'><span>          <span class=\"hljs-string\">\"Content-Type\"<\/span>: <span class=\"hljs-string\">\"application\/json\"<\/span>,\n<\/span><\/span><span class='shcb-loc'><span>        },\n<\/span><\/span><span class='shcb-loc'><span>      }\n<\/span><\/span><span class='shcb-loc'><span>    );\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><span class='shcb-loc'><span>    <span class=\"hljs-keyword\">if<\/span> (!response.ok) {\n<\/span><\/span><span class='shcb-loc'><span>      <span class=\"hljs-keyword\">throw<\/span> <span class=\"hljs-keyword\">new<\/span> <span class=\"hljs-built_in\">Error<\/span>(<span class=\"hljs-string\">`HTTP error! status: <span class=\"hljs-subst\">${response.status}<\/span>`<\/span>);\n<\/span><\/span><span class='shcb-loc'><span>    }\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><span class='shcb-loc'><span>    <span class=\"hljs-keyword\">const<\/span> data = <span class=\"hljs-keyword\">await<\/span> response.json();\n<\/span><\/span><span class='shcb-loc'><span>    <span class=\"hljs-built_in\">console<\/span>.log(<span class=\"hljs-string\">`<span class=\"hljs-subst\">${type}<\/span> cache purged successfully:`<\/span>);\n<\/span><\/span><span class='shcb-loc'><span>    <span class=\"hljs-built_in\">console<\/span>.log(<span class=\"hljs-built_in\">JSON<\/span>.stringify(data, <span class=\"hljs-literal\">null<\/span>, <span class=\"hljs-number\">2<\/span>));\n<\/span><\/span><span class='shcb-loc'><span>    <span class=\"hljs-keyword\">return<\/span> data;\n<\/span><\/span><span class='shcb-loc'><span>  } <span class=\"hljs-keyword\">catch<\/span> (error) {\n<\/span><\/span><span class='shcb-loc'><span>    <span class=\"hljs-built_in\">console<\/span>.error(<span class=\"hljs-string\">`Error purging <span class=\"hljs-subst\">${type}<\/span> cache:`<\/span>, error);\n<\/span><\/span><span class='shcb-loc'><span>    <span class=\"hljs-keyword\">throw<\/span> error;\n<\/span><\/span><span class='shcb-loc'><span>  }\n<\/span><\/span><span class='shcb-loc'><span>}\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-comment\">\/\/ Example usage<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-comment\">\/\/ purgeCache('your-install-id', 'all');<\/span>\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-14\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h2 class=\"wp-block-heading\" id=\"wp-engine-site-management-cli-tool\"><a><\/a>A Complete Example: WP Engine Site Management CLI Tool<\/h2>\n\n\n\n<p>To see a practical implementation of the concepts covered in this guide, check out the\u00a0<a href=\"https:\/\/github.com\/kellenmace\/wpe-site-management-cli\">WP Engine Site Management CLI Tool<\/a>. This open-source tool demonstrates how to interact with the Hosting Platform API from the command line, allowing developers to efficiently manage their WP Engine sites and installs:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"673\" height=\"524\" src=\"https:\/\/wpengine.com\/builders\/wp-content\/uploads\/2025\/04\/wpe-cli-demo.gif\" alt=\"\" class=\"wp-image-31868\"\/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Key Features<\/h3>\n\n\n\n<p>With this CLI tool, you can:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Browse accounts you have access to<\/li>\n\n\n\n<li>View sites within each account<\/li>\n\n\n\n<li>View installs (environments) within each site<\/li>\n\n\n\n<li>Create and delete sites<\/li>\n\n\n\n<li>Create and delete installs (environments)<\/li>\n<\/ul>\n\n\n\n<p><\/p>\n\n\n\n<p>For detailed usage instructions and setup steps, please follow the guidance provided in the project\u2019s&nbsp;<a href=\"https:\/\/github.com\/kellenmace\/wpe-site-management-cli#readme\">README<\/a>.<\/p>\n\n\n\n<p>Reading through the source code for this CLI tool will give you a good understanding of how multiple API endpoints can be used together to perform complex operations.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"advanced-topics\"><a><\/a>Advanced Topics<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><a><\/a>Pagination<\/h3>\n\n\n\n<p>The Hosting Platform API uses offset-based pagination for list operations. You can control the number of results per page using the\u00a0<code>limit<\/code>\u00a0parameter (maximum 100) and specify the starting point with the\u00a0<code>offset<\/code>\u00a0parameter.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-15\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript shcb-code-table shcb-line-numbers\"><span class='shcb-loc'><span><span class=\"hljs-keyword\">import<\/span> { createAuthHeader } <span class=\"hljs-keyword\">from<\/span> <span class=\"hljs-string\">\".\/utils.js\"<\/span>;\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-keyword\">async<\/span> <span class=\"hljs-function\"><span class=\"hljs-keyword\">function<\/span> <span class=\"hljs-title\">getPaginatedList<\/span>(<span class=\"hljs-params\">endpoint, limit = <span class=\"hljs-number\">100<\/span>, offset = <span class=\"hljs-number\">0<\/span><\/span>) <\/span>{\n<\/span><\/span><span class='shcb-loc'><span>  <span class=\"hljs-keyword\">try<\/span> {\n<\/span><\/span><span class='shcb-loc'><span>    <span class=\"hljs-keyword\">const<\/span> response = <span class=\"hljs-keyword\">await<\/span> fetch(\n<\/span><\/span><span class='shcb-loc'><span>      <span class=\"hljs-string\">`https:\/\/api.wpengineapi.com\/v1\/<span class=\"hljs-subst\">${endpoint}<\/span>?limit=<span class=\"hljs-subst\">${limit}<\/span>&amp;offset=<span class=\"hljs-subst\">${offset}<\/span>`<\/span>,\n<\/span><\/span><span class='shcb-loc'><span>      {\n<\/span><\/span><span class='shcb-loc'><span>        <span class=\"hljs-attr\">headers<\/span>: { <span class=\"hljs-attr\">Authorization<\/span>: createAuthHeader() },\n<\/span><\/span><span class='shcb-loc'><span>      }\n<\/span><\/span><span class='shcb-loc'><span>    );\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><span class='shcb-loc'><span>    <span class=\"hljs-keyword\">if<\/span> (!response.ok) {\n<\/span><\/span><span class='shcb-loc'><span>      <span class=\"hljs-keyword\">throw<\/span> <span class=\"hljs-keyword\">new<\/span> <span class=\"hljs-built_in\">Error<\/span>(<span class=\"hljs-string\">`HTTP error! status: <span class=\"hljs-subst\">${response.status}<\/span>`<\/span>);\n<\/span><\/span><span class='shcb-loc'><span>    }\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><span class='shcb-loc'><span>    <span class=\"hljs-keyword\">const<\/span> data = <span class=\"hljs-keyword\">await<\/span> response.json();\n<\/span><\/span><span class='shcb-loc'><span>    <span class=\"hljs-built_in\">console<\/span>.log(<span class=\"hljs-string\">`<span class=\"hljs-subst\">${endpoint}<\/span> (limit: <span class=\"hljs-subst\">${limit}<\/span>, offset: <span class=\"hljs-subst\">${offset}<\/span>):`<\/span>);\n<\/span><\/span><span class='shcb-loc'><span>    <span class=\"hljs-built_in\">console<\/span>.log(<span class=\"hljs-string\">`Total items: <span class=\"hljs-subst\">${data.count}<\/span>`<\/span>);\n<\/span><\/span><span class='shcb-loc'><span>    <span class=\"hljs-built_in\">console<\/span>.log(<span class=\"hljs-string\">`Items in this page: <span class=\"hljs-subst\">${data.results.length}<\/span>`<\/span>);\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><span class='shcb-loc'><span>    <span class=\"hljs-comment\">\/\/ Check if there are more pages<\/span>\n<\/span><\/span><span class='shcb-loc'><span>    <span class=\"hljs-keyword\">if<\/span> (data.next) {\n<\/span><\/span><span class='shcb-loc'><span>      <span class=\"hljs-built_in\">console<\/span>.log(<span class=\"hljs-string\">`Next page available at: <span class=\"hljs-subst\">${data.next}<\/span>`<\/span>);\n<\/span><\/span><span class='shcb-loc'><span>    }\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><span class='shcb-loc'><span>    <span class=\"hljs-keyword\">return<\/span> data;\n<\/span><\/span><span class='shcb-loc'><span>  } <span class=\"hljs-keyword\">catch<\/span> (error) {\n<\/span><\/span><span class='shcb-loc'><span>    <span class=\"hljs-built_in\">console<\/span>.error(<span class=\"hljs-string\">`Error fetching paginated list for <span class=\"hljs-subst\">${endpoint}<\/span>:`<\/span>, error);\n<\/span><\/span><span class='shcb-loc'><span>    <span class=\"hljs-keyword\">throw<\/span> error;\n<\/span><\/span><span class='shcb-loc'><span>  }\n<\/span><\/span><span class='shcb-loc'><span>}\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-comment\">\/\/ Example usage<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-comment\">\/\/ getPaginatedList('installs', 10, 0);<\/span>\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-15\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h3 class=\"wp-block-heading\"><a><\/a>Error Handling<\/h3>\n\n\n\n<p>The Hosting Platform API uses standard HTTP response codes to indicate the success or failure of requests. Here\u2019s how to implement robust error handling:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-16\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript shcb-code-table shcb-line-numbers\"><span class='shcb-loc'><span><span class=\"hljs-keyword\">import<\/span> { createAuthHeader } <span class=\"hljs-keyword\">from<\/span> <span class=\"hljs-string\">\".\/utils.js\"<\/span>;\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-keyword\">async<\/span> <span class=\"hljs-function\"><span class=\"hljs-keyword\">function<\/span> <span class=\"hljs-title\">makeApiRequest<\/span>(<span class=\"hljs-params\">method, endpoint, data = null<\/span>) <\/span>{\n<\/span><\/span><span class='shcb-loc'><span>  <span class=\"hljs-keyword\">try<\/span> {\n<\/span><\/span><span class='shcb-loc'><span>    <span class=\"hljs-keyword\">const<\/span> options = {\n<\/span><\/span><span class='shcb-loc'><span>      method,\n<\/span><\/span><span class='shcb-loc'><span>      <span class=\"hljs-attr\">headers<\/span>: {\n<\/span><\/span><span class='shcb-loc'><span>        <span class=\"hljs-attr\">Authorization<\/span>: createAuthHeader(),\n<\/span><\/span><span class='shcb-loc'><span>        <span class=\"hljs-string\">\"Content-Type\"<\/span>: <span class=\"hljs-string\">\"application\/json\"<\/span>,\n<\/span><\/span><span class='shcb-loc'><span>      },\n<\/span><\/span><span class='shcb-loc'><span>    };\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><span class='shcb-loc'><span>    <span class=\"hljs-keyword\">if<\/span> (method !== <span class=\"hljs-string\">\"GET\"<\/span> &amp;&amp; data) {\n<\/span><\/span><span class='shcb-loc'><span>      options.body = <span class=\"hljs-built_in\">JSON<\/span>.stringify(data);\n<\/span><\/span><span class='shcb-loc'><span>    }\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><span class='shcb-loc'><span>    <span class=\"hljs-keyword\">const<\/span> response = <span class=\"hljs-keyword\">await<\/span> fetch(\n<\/span><\/span><span class='shcb-loc'><span>      <span class=\"hljs-string\">`https:\/\/api.wpengineapi.com\/v1\/<span class=\"hljs-subst\">${endpoint}<\/span>`<\/span>,\n<\/span><\/span><span class='shcb-loc'><span>      options\n<\/span><\/span><span class='shcb-loc'><span>    );\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><span class='shcb-loc'><span>    <span class=\"hljs-keyword\">if<\/span> (!response.ok) {\n<\/span><\/span><span class='shcb-loc'><span>      <span class=\"hljs-keyword\">const<\/span> errorData = <span class=\"hljs-keyword\">await<\/span> response.json().catch(<span class=\"hljs-function\"><span class=\"hljs-params\">()<\/span> =&gt;<\/span> ({}));\n<\/span><\/span><span class='shcb-loc'><span>      <span class=\"hljs-keyword\">const<\/span> status = response.status;\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><span class='shcb-loc'><span>      <span class=\"hljs-keyword\">switch<\/span> (status) {\n<\/span><\/span><span class='shcb-loc'><span>        <span class=\"hljs-keyword\">case<\/span> <span class=\"hljs-number\">400<\/span>:\n<\/span><\/span><span class='shcb-loc'><span>          <span class=\"hljs-built_in\">console<\/span>.error(\n<\/span><\/span><span class='shcb-loc'><span>            <span class=\"hljs-string\">\"Bad Request: The request was invalid or cannot be served.\"<\/span>,\n<\/span><\/span><span class='shcb-loc'><span>            errorData\n<\/span><\/span><span class='shcb-loc'><span>          );\n<\/span><\/span><span class='shcb-loc'><span>          <span class=\"hljs-keyword\">break<\/span>;\n<\/span><\/span><span class='shcb-loc'><span>        <span class=\"hljs-keyword\">case<\/span> <span class=\"hljs-number\">401<\/span>:\n<\/span><\/span><span class='shcb-loc'><span>          <span class=\"hljs-built_in\">console<\/span>.error(\n<\/span><\/span><span class='shcb-loc'><span>            <span class=\"hljs-string\">\"Unauthorized: Authentication failed or user does not have permissions.\"<\/span>,\n<\/span><\/span><span class='shcb-loc'><span>            errorData\n<\/span><\/span><span class='shcb-loc'><span>          );\n<\/span><\/span><span class='shcb-loc'><span>          <span class=\"hljs-keyword\">break<\/span>;\n<\/span><\/span><span class='shcb-loc'><span>        <span class=\"hljs-keyword\">case<\/span> <span class=\"hljs-number\">404<\/span>:\n<\/span><\/span><span class='shcb-loc'><span>          <span class=\"hljs-built_in\">console<\/span>.error(\n<\/span><\/span><span class='shcb-loc'><span>            <span class=\"hljs-string\">\"Not Found: The requested resource does not exist.\"<\/span>,\n<\/span><\/span><span class='shcb-loc'><span>            errorData\n<\/span><\/span><span class='shcb-loc'><span>          );\n<\/span><\/span><span class='shcb-loc'><span>          <span class=\"hljs-keyword\">break<\/span>;\n<\/span><\/span><span class='shcb-loc'><span>        <span class=\"hljs-keyword\">case<\/span> <span class=\"hljs-number\">429<\/span>:\n<\/span><\/span><span class='shcb-loc'><span>          <span class=\"hljs-built_in\">console<\/span>.error(<span class=\"hljs-string\">\"Too Many Requests: Rate limit exceeded.\"<\/span>, errorData);\n<\/span><\/span><span class='shcb-loc'><span>          <span class=\"hljs-comment\">\/\/ Implement retry logic with exponential backoff<\/span>\n<\/span><\/span><span class='shcb-loc'><span>          <span class=\"hljs-keyword\">break<\/span>;\n<\/span><\/span><span class='shcb-loc'><span>        <span class=\"hljs-keyword\">case<\/span> <span class=\"hljs-number\">503<\/span>:\n<\/span><\/span><span class='shcb-loc'><span>          <span class=\"hljs-built_in\">console<\/span>.error(\n<\/span><\/span><span class='shcb-loc'><span>            <span class=\"hljs-string\">\"Service Unavailable: The server is currently unavailable.\"<\/span>,\n<\/span><\/span><span class='shcb-loc'><span>            errorData\n<\/span><\/span><span class='shcb-loc'><span>          );\n<\/span><\/span><span class='shcb-loc'><span>          <span class=\"hljs-comment\">\/\/ Implement retry logic<\/span>\n<\/span><\/span><span class='shcb-loc'><span>          <span class=\"hljs-keyword\">break<\/span>;\n<\/span><\/span><span class='shcb-loc'><span>        <span class=\"hljs-keyword\">default<\/span>:\n<\/span><\/span><span class='shcb-loc'><span>          <span class=\"hljs-built_in\">console<\/span>.error(<span class=\"hljs-string\">`Error <span class=\"hljs-subst\">${status}<\/span>:`<\/span>, errorData);\n<\/span><\/span><span class='shcb-loc'><span>      }\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><span class='shcb-loc'><span>      <span class=\"hljs-keyword\">throw<\/span> <span class=\"hljs-keyword\">new<\/span> <span class=\"hljs-built_in\">Error<\/span>(<span class=\"hljs-string\">`HTTP error! status: <span class=\"hljs-subst\">${status}<\/span>`<\/span>);\n<\/span><\/span><span class='shcb-loc'><span>    }\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><span class='shcb-loc'><span>    <span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-keyword\">await<\/span> response.json();\n<\/span><\/span><span class='shcb-loc'><span>  } <span class=\"hljs-keyword\">catch<\/span> (error) {\n<\/span><\/span><span class='shcb-loc'><span>    <span class=\"hljs-keyword\">if<\/span> (error <span class=\"hljs-keyword\">instanceof<\/span> <span class=\"hljs-built_in\">TypeError<\/span>) {\n<\/span><\/span><span class='shcb-loc'><span>      <span class=\"hljs-comment\">\/\/ Network error or other fetch-related error<\/span>\n<\/span><\/span><span class='shcb-loc'><span>      <span class=\"hljs-built_in\">console<\/span>.error(<span class=\"hljs-string\">\"Network error:\"<\/span>, error.message);\n<\/span><\/span><span class='shcb-loc'><span>    } <span class=\"hljs-keyword\">else<\/span> {\n<\/span><\/span><span class='shcb-loc'><span>      <span class=\"hljs-comment\">\/\/ Handle other errors<\/span>\n<\/span><\/span><span class='shcb-loc'><span>      <span class=\"hljs-built_in\">console<\/span>.error(<span class=\"hljs-string\">\"Unexpected error:\"<\/span>, error);\n<\/span><\/span><span class='shcb-loc'><span>    }\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><span class='shcb-loc'><span>    <span class=\"hljs-keyword\">throw<\/span> error;\n<\/span><\/span><span class='shcb-loc'><span>  }\n<\/span><\/span><span class='shcb-loc'><span>}\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-comment\">\/\/ Example usage<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-comment\">\/\/ makeApiRequest('GET', 'installs');<\/span>\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-16\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h3 class=\"wp-block-heading\"><a><\/a>Rate Limiting<\/h3>\n\n\n\n<p>The Hosting Platform API implements rate limiting to prevent abuse. If you exceed the rate limits, you\u2019ll receive a 429 Too Many Requests response. To handle this gracefully, implement a retry mechanism with exponential backoff:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-17\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript shcb-code-table shcb-line-numbers\"><span class='shcb-loc'><span><span class=\"hljs-keyword\">import<\/span> { createAuthHeader } <span class=\"hljs-keyword\">from<\/span> <span class=\"hljs-string\">\".\/utils.js\"<\/span>;\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-keyword\">async<\/span> <span class=\"hljs-function\"><span class=\"hljs-keyword\">function<\/span> <span class=\"hljs-title\">makeApiRequestWithRetry<\/span>(<span class=\"hljs-params\"><\/span><\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-function\"><span class=\"hljs-params\">  method,<\/span><\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-function\"><span class=\"hljs-params\">  endpoint,<\/span><\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-function\"><span class=\"hljs-params\">  data = null,<\/span><\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-function\"><span class=\"hljs-params\">  maxRetries = <span class=\"hljs-number\">3<\/span>,<\/span><\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-function\"><span class=\"hljs-params\">  initialDelay = <span class=\"hljs-number\">1000<\/span><\/span><\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-function\"><span class=\"hljs-params\"><\/span>) <\/span>{\n<\/span><\/span><span class='shcb-loc'><span>  <span class=\"hljs-keyword\">let<\/span> retries = <span class=\"hljs-number\">0<\/span>;\n<\/span><\/span><span class='shcb-loc'><span>  <span class=\"hljs-keyword\">let<\/span> delay = initialDelay;\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><span class='shcb-loc'><span>  <span class=\"hljs-keyword\">while<\/span> (<span class=\"hljs-literal\">true<\/span>) {\n<\/span><\/span><span class='shcb-loc'><span>    <span class=\"hljs-keyword\">try<\/span> {\n<\/span><\/span><span class='shcb-loc'><span>      <span class=\"hljs-keyword\">const<\/span> options = {\n<\/span><\/span><span class='shcb-loc'><span>        method,\n<\/span><\/span><span class='shcb-loc'><span>        <span class=\"hljs-attr\">headers<\/span>: {\n<\/span><\/span><span class='shcb-loc'><span>          <span class=\"hljs-attr\">Authorization<\/span>: createAuthHeader(),\n<\/span><\/span><span class='shcb-loc'><span>          <span class=\"hljs-string\">\"Content-Type\"<\/span>: <span class=\"hljs-string\">\"application\/json\"<\/span>,\n<\/span><\/span><span class='shcb-loc'><span>        },\n<\/span><\/span><span class='shcb-loc'><span>      };\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><span class='shcb-loc'><span>      <span class=\"hljs-keyword\">if<\/span> (method !== <span class=\"hljs-string\">\"GET\"<\/span> &amp;&amp; data) {\n<\/span><\/span><span class='shcb-loc'><span>        options.body = <span class=\"hljs-built_in\">JSON<\/span>.stringify(data);\n<\/span><\/span><span class='shcb-loc'><span>      }\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><span class='shcb-loc'><span>      <span class=\"hljs-keyword\">const<\/span> response = <span class=\"hljs-keyword\">await<\/span> fetch(\n<\/span><\/span><span class='shcb-loc'><span>        <span class=\"hljs-string\">`https:\/\/api.wpengineapi.com\/v1\/<span class=\"hljs-subst\">${endpoint}<\/span>`<\/span>,\n<\/span><\/span><span class='shcb-loc'><span>        options\n<\/span><\/span><span class='shcb-loc'><span>      );\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><span class='shcb-loc'><span>      <span class=\"hljs-keyword\">if<\/span> (response.status === <span class=\"hljs-number\">429<\/span> &amp;&amp; retries &lt; maxRetries) {\n<\/span><\/span><span class='shcb-loc'><span>        <span class=\"hljs-comment\">\/\/ Rate limit exceeded, retry after delay<\/span>\n<\/span><\/span><span class='shcb-loc'><span>        retries++;\n<\/span><\/span><span class='shcb-loc'><span>        <span class=\"hljs-built_in\">console<\/span>.log(\n<\/span><\/span><span class='shcb-loc'><span>          <span class=\"hljs-string\">`Rate limit exceeded. Retrying in <span class=\"hljs-subst\">${delay}<\/span>ms... (<span class=\"hljs-subst\">${retries}<\/span>\/<span class=\"hljs-subst\">${maxRetries}<\/span>)`<\/span>\n<\/span><\/span><span class='shcb-loc'><span>        );\n<\/span><\/span><span class='shcb-loc'><span>        <span class=\"hljs-keyword\">await<\/span> <span class=\"hljs-keyword\">new<\/span> <span class=\"hljs-built_in\">Promise<\/span>(<span class=\"hljs-function\">(<span class=\"hljs-params\">resolve<\/span>) =&gt;<\/span> setTimeout(resolve, delay));\n<\/span><\/span><span class='shcb-loc'><span>        delay *= <span class=\"hljs-number\">2<\/span>; <span class=\"hljs-comment\">\/\/ Exponential backoff<\/span>\n<\/span><\/span><span class='shcb-loc'><span>        <span class=\"hljs-keyword\">continue<\/span>;\n<\/span><\/span><span class='shcb-loc'><span>      }\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><span class='shcb-loc'><span>      <span class=\"hljs-keyword\">if<\/span> (!response.ok) {\n<\/span><\/span><span class='shcb-loc'><span>        <span class=\"hljs-keyword\">throw<\/span> <span class=\"hljs-keyword\">new<\/span> <span class=\"hljs-built_in\">Error<\/span>(<span class=\"hljs-string\">`HTTP error! status: <span class=\"hljs-subst\">${response.status}<\/span>`<\/span>);\n<\/span><\/span><span class='shcb-loc'><span>      }\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><span class='shcb-loc'><span>      <span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-keyword\">await<\/span> response.json();\n<\/span><\/span><span class='shcb-loc'><span>    } <span class=\"hljs-keyword\">catch<\/span> (error) {\n<\/span><\/span><span class='shcb-loc'><span>      <span class=\"hljs-keyword\">if<\/span> (retries &gt;= maxRetries) {\n<\/span><\/span><span class='shcb-loc'><span>        <span class=\"hljs-built_in\">console<\/span>.error(<span class=\"hljs-string\">\"Max retries reached. Giving up.\"<\/span>);\n<\/span><\/span><span class='shcb-loc'><span>        <span class=\"hljs-keyword\">throw<\/span> error;\n<\/span><\/span><span class='shcb-loc'><span>      }\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><span class='shcb-loc'><span>      <span class=\"hljs-keyword\">if<\/span> (!(error <span class=\"hljs-keyword\">instanceof<\/span> <span class=\"hljs-built_in\">Error<\/span> &amp;&amp; error.message.includes(<span class=\"hljs-string\">\"429\"<\/span>))) {\n<\/span><\/span><span class='shcb-loc'><span>        <span class=\"hljs-keyword\">throw<\/span> error; <span class=\"hljs-comment\">\/\/ Only retry on rate limit errors<\/span>\n<\/span><\/span><span class='shcb-loc'><span>      }\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><span class='shcb-loc'><span>      retries++;\n<\/span><\/span><span class='shcb-loc'><span>      <span class=\"hljs-built_in\">console<\/span>.log(\n<\/span><\/span><span class='shcb-loc'><span>        <span class=\"hljs-string\">`Error: <span class=\"hljs-subst\">${error.message}<\/span>. Retrying in <span class=\"hljs-subst\">${delay}<\/span>ms... (<span class=\"hljs-subst\">${retries}<\/span>\/<span class=\"hljs-subst\">${maxRetries}<\/span>)`<\/span>\n<\/span><\/span><span class='shcb-loc'><span>      );\n<\/span><\/span><span class='shcb-loc'><span>      <span class=\"hljs-keyword\">await<\/span> <span class=\"hljs-keyword\">new<\/span> <span class=\"hljs-built_in\">Promise<\/span>(<span class=\"hljs-function\">(<span class=\"hljs-params\">resolve<\/span>) =&gt;<\/span> setTimeout(resolve, delay));\n<\/span><\/span><span class='shcb-loc'><span>      delay *= <span class=\"hljs-number\">2<\/span>; <span class=\"hljs-comment\">\/\/ Exponential backoff<\/span>\n<\/span><\/span><span class='shcb-loc'><span>    }\n<\/span><\/span><span class='shcb-loc'><span>  }\n<\/span><\/span><span class='shcb-loc'><span>}\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-comment\">\/\/ Example usage<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-comment\">\/\/ makeApiRequestWithRetry('GET', 'installs');<\/span>\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-17\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h2 class=\"wp-block-heading\" id=\"best-practices\"><a><\/a>Best Practices<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><a><\/a>Security Considerations<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Protect your API credentials<\/strong>: Store your API credentials securely and never expose them in client-side code.<\/li>\n\n\n\n<li><strong>Use environment variables<\/strong>: Store sensitive information like API credentials in environment variables rather than hardcoding them in your application.<\/li>\n\n\n\n<li><strong>Implement proper error handling<\/strong>: Handle errors gracefully to prevent exposing sensitive information in error messages.<\/li>\n\n\n\n<li><strong>Validate input<\/strong>: Always validate and sanitize user input before using it in API requests.<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\"><a><\/a>Performance Optimization<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Use pagination<\/strong>: When retrieving large datasets, use pagination to limit the amount of data transferred in a single request.<\/li>\n\n\n\n<li><strong>Implement caching<\/strong>: Cache API responses when appropriate to reduce the number of requests made to the API.<\/li>\n\n\n\n<li><strong>Batch operations<\/strong>: When possible, batch multiple operations into a single request to reduce overhead.<\/li>\n\n\n\n<li><strong>Handle rate limits<\/strong>: Implement retry mechanisms with exponential backoff to handle rate limiting gracefully.<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\"><a><\/a>Monitoring and Logging<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Log API requests and responses<\/strong>: Keep logs of API interactions for debugging and auditing purposes.<\/li>\n\n\n\n<li><strong>Monitor API usage<\/strong>: Track your API usage to stay within rate limits and identify potential issues.<\/li>\n\n\n\n<li><strong>Set up alerts<\/strong>: Configure alerts for API errors or unusual patterns to catch issues early.<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"conclusion\"><a><\/a>Conclusion<\/h2>\n\n\n\n<p>The Hosting Platform API provides a powerful way to automate and streamline your WordPress hosting management. By leveraging the API, you can build custom tools and workflows that save time, reduce errors, and improve efficiency.<\/p>\n\n\n\n<p>This guide has covered the fundamentals of working with the Hosting Platform API, from authentication and basic operations to advanced topics like pagination, error handling, and rate limiting. The accompanying code examples demonstrate how to implement these concepts in practice using Node.js\/JavaScript.<\/p>\n\n\n\n<p>As you continue to explore the Hosting Platform API, remember to refer to the\u00a0<a href=\"https:\/\/wpengineapi.com\/\">official documentation<\/a>\u00a0for the most up-to-date information and best practices.<\/p>\n\n\n\n<p>Happy coding!<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"resources\"><a><\/a>Resources<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/github.com\/kellenmace\/wpe-site-management-cli\">WP Engine Site Management CLI Tool demo app<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wpengineapi.com\/\">WP Engine Hosting Platform API Documentation<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wpengine.com\/support\/enabling-wp-engine-api\/\">WP Engine Hosting Platform API Support Center page<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/my.wpengine.com\/\">WP Engine User Portal<\/a><\/li>\n<\/ul>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>In today&#8217;s fast-paced digital landscape, automation is key to efficient workflow management. For developers and agencies working with WordPress sites hosted on WP Engine, our Hosting Platform API offers powerful [&hellip;]<\/p>\n","protected":false},"author":8,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_EventAllDay":false,"_EventTimezone":"","_EventStartDate":"","_EventEndDate":"","_EventStartDateUTC":"","_EventEndDateUTC":"","_EventShowMap":false,"_EventShowMapLink":false,"_EventURL":"","_EventCost":"","_EventCostDescription":"","_EventCurrencySymbol":"","_EventCurrencyCode":"","_EventCurrencyPosition":"","_EventDateTimeSeparator":"","_EventTimeRangeSeparator":"","_EventOrganizerID":[],"_EventVenueID":[],"_OrganizerEmail":"","_OrganizerPhone":"","_OrganizerWebsite":"","_VenueAddress":"","_VenueCity":"","_VenueCountry":"","_VenueProvince":"","_VenueState":"","_VenueZip":"","_VenuePhone":"","_VenueURL":"","_VenueStateProvince":"","_VenueLat":"","_VenueLng":"","_VenueShowMap":false,"_VenueShowMapLink":false,"footnotes":""},"categories":[23,1],"tags":[],"class_list":["post-31861","post","type-post","status-publish","format-standard","hentry","category-headless","category-wordpress"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Mastering the WP Engine Hosting Platform API: A Comprehensive Guide for Developers - Builders<\/title>\n<meta name=\"description\" content=\"A comprehensive guide on working with the WP Engine Hosting Platform API for developers.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/wpengine.com\/builders\/mastering-the-wp-engine-api-a-comprehensive-guide-for-developers\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Mastering the WP Engine API: A Comprehensive Guide for Developers\" \/>\n<meta property=\"og:description\" content=\"A comprehensive guide on working with the WP Engine API for developers.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/wpengine.com\/builders\/mastering-the-wp-engine-api-a-comprehensive-guide-for-developers\/\" \/>\n<meta property=\"og:site_name\" content=\"Builders\" \/>\n<meta property=\"article:published_time\" content=\"2025-04-21T17:20:28+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-12-09T16:55:50+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/wpengine.com\/builders\/wp-content\/uploads\/2025\/04\/mastering-the-wp-engine-api.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1920\" \/>\n\t<meta property=\"og:image:height\" content=\"1080\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Kellen Mace\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@wpebuilders\" \/>\n<meta name=\"twitter:site\" content=\"@wpebuilders\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Kellen Mace\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/wpengine.com\\\/builders\\\/mastering-the-wp-engine-api-a-comprehensive-guide-for-developers\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/wpengine.com\\\/builders\\\/mastering-the-wp-engine-api-a-comprehensive-guide-for-developers\\\/\"},\"author\":{\"name\":\"Kellen Mace\",\"@id\":\"https:\\\/\\\/wpengine.com\\\/builders\\\/#\\\/schema\\\/person\\\/e6e62698d757a8421cc9723ffa8b1be3\"},\"headline\":\"Mastering the WP Engine Hosting Platform API: A Comprehensive Guide for Developers\",\"datePublished\":\"2025-04-21T17:20:28+00:00\",\"dateModified\":\"2025-12-09T16:55:50+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/wpengine.com\\\/builders\\\/mastering-the-wp-engine-api-a-comprehensive-guide-for-developers\\\/\"},\"wordCount\":1484,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/wpengine.com\\\/builders\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/wpengine.com\\\/builders\\\/mastering-the-wp-engine-api-a-comprehensive-guide-for-developers\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/wpengine.com\\\/builders\\\/wp-content\\\/uploads\\\/2025\\\/04\\\/wpe-cli-demo.gif\",\"articleSection\":[\"Headless\",\"WordPress\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/wpengine.com\\\/builders\\\/mastering-the-wp-engine-api-a-comprehensive-guide-for-developers\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/wpengine.com\\\/builders\\\/mastering-the-wp-engine-api-a-comprehensive-guide-for-developers\\\/\",\"url\":\"https:\\\/\\\/wpengine.com\\\/builders\\\/mastering-the-wp-engine-api-a-comprehensive-guide-for-developers\\\/\",\"name\":\"Mastering the WP Engine Hosting Platform API: A Comprehensive Guide for Developers - Builders\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/wpengine.com\\\/builders\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/wpengine.com\\\/builders\\\/mastering-the-wp-engine-api-a-comprehensive-guide-for-developers\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/wpengine.com\\\/builders\\\/mastering-the-wp-engine-api-a-comprehensive-guide-for-developers\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/wpengine.com\\\/builders\\\/wp-content\\\/uploads\\\/2025\\\/04\\\/wpe-cli-demo.gif\",\"datePublished\":\"2025-04-21T17:20:28+00:00\",\"dateModified\":\"2025-12-09T16:55:50+00:00\",\"description\":\"A comprehensive guide on working with the WP Engine Hosting Platform API for developers.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/wpengine.com\\\/builders\\\/mastering-the-wp-engine-api-a-comprehensive-guide-for-developers\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/wpengine.com\\\/builders\\\/mastering-the-wp-engine-api-a-comprehensive-guide-for-developers\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/wpengine.com\\\/builders\\\/mastering-the-wp-engine-api-a-comprehensive-guide-for-developers\\\/#primaryimage\",\"url\":\"https:\\\/\\\/wpengine.com\\\/builders\\\/wp-content\\\/uploads\\\/2025\\\/04\\\/wpe-cli-demo.gif\",\"contentUrl\":\"https:\\\/\\\/wpengine.com\\\/builders\\\/wp-content\\\/uploads\\\/2025\\\/04\\\/wpe-cli-demo.gif\",\"width\":673,\"height\":524},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/wpengine.com\\\/builders\\\/mastering-the-wp-engine-api-a-comprehensive-guide-for-developers\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/wpengine.com\\\/builders\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Mastering the WP Engine Hosting Platform API: A Comprehensive Guide for Developers\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/wpengine.com\\\/builders\\\/#website\",\"url\":\"https:\\\/\\\/wpengine.com\\\/builders\\\/\",\"name\":\"Builders\",\"description\":\"Reimagining the way we build with WordPress.\",\"publisher\":{\"@id\":\"https:\\\/\\\/wpengine.com\\\/builders\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/wpengine.com\\\/builders\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/wpengine.com\\\/builders\\\/#organization\",\"name\":\"WP Engine\",\"url\":\"https:\\\/\\\/wpengine.com\\\/builders\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/wpengine.com\\\/builders\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/wpengine.com\\\/builders\\\/wp-content\\\/uploads\\\/2024\\\/05\\\/WP-Engine-Horizontal@2x.png\",\"contentUrl\":\"https:\\\/\\\/wpengine.com\\\/builders\\\/wp-content\\\/uploads\\\/2024\\\/05\\\/WP-Engine-Horizontal@2x.png\",\"width\":348,\"height\":68,\"caption\":\"WP Engine\"},\"image\":{\"@id\":\"https:\\\/\\\/wpengine.com\\\/builders\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/x.com\\\/wpebuilders\",\"https:\\\/\\\/www.youtube.com\\\/channel\\\/UCh1WuL54XFb9ZI6m6goFv1g\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/wpengine.com\\\/builders\\\/#\\\/schema\\\/person\\\/e6e62698d757a8421cc9723ffa8b1be3\",\"name\":\"Kellen Mace\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/479f2598f161363ba2e78e1b085782477580ea3d5c4609cc9bce3be4945090d5?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/479f2598f161363ba2e78e1b085782477580ea3d5c4609cc9bce3be4945090d5?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/479f2598f161363ba2e78e1b085782477580ea3d5c4609cc9bce3be4945090d5?s=96&d=mm&r=g\",\"caption\":\"Kellen Mace\"},\"description\":\"Kellen Mace is the Manager of the Developer Relations team at WP Engine. He likes building modern web apps with SvelteKit, TypeScript, Tailwind, and AI tools.\",\"url\":\"https:\\\/\\\/wpengine.com\\\/builders\\\/author\\\/kellen-macewpengine-com\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Mastering the WP Engine Hosting Platform API: A Comprehensive Guide for Developers - Builders","description":"A comprehensive guide on working with the WP Engine Hosting Platform API for developers.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/wpengine.com\/builders\/mastering-the-wp-engine-api-a-comprehensive-guide-for-developers\/","og_locale":"en_US","og_type":"article","og_title":"Mastering the WP Engine API: A Comprehensive Guide for Developers","og_description":"A comprehensive guide on working with the WP Engine API for developers.","og_url":"https:\/\/wpengine.com\/builders\/mastering-the-wp-engine-api-a-comprehensive-guide-for-developers\/","og_site_name":"Builders","article_published_time":"2025-04-21T17:20:28+00:00","article_modified_time":"2025-12-09T16:55:50+00:00","og_image":[{"width":1920,"height":1080,"url":"https:\/\/wpengine.com\/builders\/wp-content\/uploads\/2025\/04\/mastering-the-wp-engine-api.png","type":"image\/png"}],"author":"Kellen Mace","twitter_card":"summary_large_image","twitter_creator":"@wpebuilders","twitter_site":"@wpebuilders","twitter_misc":{"Written by":"Kellen Mace","Est. reading time":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/wpengine.com\/builders\/mastering-the-wp-engine-api-a-comprehensive-guide-for-developers\/#article","isPartOf":{"@id":"https:\/\/wpengine.com\/builders\/mastering-the-wp-engine-api-a-comprehensive-guide-for-developers\/"},"author":{"name":"Kellen Mace","@id":"https:\/\/wpengine.com\/builders\/#\/schema\/person\/e6e62698d757a8421cc9723ffa8b1be3"},"headline":"Mastering the WP Engine Hosting Platform API: A Comprehensive Guide for Developers","datePublished":"2025-04-21T17:20:28+00:00","dateModified":"2025-12-09T16:55:50+00:00","mainEntityOfPage":{"@id":"https:\/\/wpengine.com\/builders\/mastering-the-wp-engine-api-a-comprehensive-guide-for-developers\/"},"wordCount":1484,"commentCount":0,"publisher":{"@id":"https:\/\/wpengine.com\/builders\/#organization"},"image":{"@id":"https:\/\/wpengine.com\/builders\/mastering-the-wp-engine-api-a-comprehensive-guide-for-developers\/#primaryimage"},"thumbnailUrl":"https:\/\/wpengine.com\/builders\/wp-content\/uploads\/2025\/04\/wpe-cli-demo.gif","articleSection":["Headless","WordPress"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/wpengine.com\/builders\/mastering-the-wp-engine-api-a-comprehensive-guide-for-developers\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/wpengine.com\/builders\/mastering-the-wp-engine-api-a-comprehensive-guide-for-developers\/","url":"https:\/\/wpengine.com\/builders\/mastering-the-wp-engine-api-a-comprehensive-guide-for-developers\/","name":"Mastering the WP Engine Hosting Platform API: A Comprehensive Guide for Developers - Builders","isPartOf":{"@id":"https:\/\/wpengine.com\/builders\/#website"},"primaryImageOfPage":{"@id":"https:\/\/wpengine.com\/builders\/mastering-the-wp-engine-api-a-comprehensive-guide-for-developers\/#primaryimage"},"image":{"@id":"https:\/\/wpengine.com\/builders\/mastering-the-wp-engine-api-a-comprehensive-guide-for-developers\/#primaryimage"},"thumbnailUrl":"https:\/\/wpengine.com\/builders\/wp-content\/uploads\/2025\/04\/wpe-cli-demo.gif","datePublished":"2025-04-21T17:20:28+00:00","dateModified":"2025-12-09T16:55:50+00:00","description":"A comprehensive guide on working with the WP Engine Hosting Platform API for developers.","breadcrumb":{"@id":"https:\/\/wpengine.com\/builders\/mastering-the-wp-engine-api-a-comprehensive-guide-for-developers\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/wpengine.com\/builders\/mastering-the-wp-engine-api-a-comprehensive-guide-for-developers\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/wpengine.com\/builders\/mastering-the-wp-engine-api-a-comprehensive-guide-for-developers\/#primaryimage","url":"https:\/\/wpengine.com\/builders\/wp-content\/uploads\/2025\/04\/wpe-cli-demo.gif","contentUrl":"https:\/\/wpengine.com\/builders\/wp-content\/uploads\/2025\/04\/wpe-cli-demo.gif","width":673,"height":524},{"@type":"BreadcrumbList","@id":"https:\/\/wpengine.com\/builders\/mastering-the-wp-engine-api-a-comprehensive-guide-for-developers\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/wpengine.com\/builders\/"},{"@type":"ListItem","position":2,"name":"Mastering the WP Engine Hosting Platform API: A Comprehensive Guide for Developers"}]},{"@type":"WebSite","@id":"https:\/\/wpengine.com\/builders\/#website","url":"https:\/\/wpengine.com\/builders\/","name":"Builders","description":"Reimagining the way we build with WordPress.","publisher":{"@id":"https:\/\/wpengine.com\/builders\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/wpengine.com\/builders\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/wpengine.com\/builders\/#organization","name":"WP Engine","url":"https:\/\/wpengine.com\/builders\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/wpengine.com\/builders\/#\/schema\/logo\/image\/","url":"https:\/\/wpengine.com\/builders\/wp-content\/uploads\/2024\/05\/WP-Engine-Horizontal@2x.png","contentUrl":"https:\/\/wpengine.com\/builders\/wp-content\/uploads\/2024\/05\/WP-Engine-Horizontal@2x.png","width":348,"height":68,"caption":"WP Engine"},"image":{"@id":"https:\/\/wpengine.com\/builders\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/x.com\/wpebuilders","https:\/\/www.youtube.com\/channel\/UCh1WuL54XFb9ZI6m6goFv1g"]},{"@type":"Person","@id":"https:\/\/wpengine.com\/builders\/#\/schema\/person\/e6e62698d757a8421cc9723ffa8b1be3","name":"Kellen Mace","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/479f2598f161363ba2e78e1b085782477580ea3d5c4609cc9bce3be4945090d5?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/479f2598f161363ba2e78e1b085782477580ea3d5c4609cc9bce3be4945090d5?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/479f2598f161363ba2e78e1b085782477580ea3d5c4609cc9bce3be4945090d5?s=96&d=mm&r=g","caption":"Kellen Mace"},"description":"Kellen Mace is the Manager of the Developer Relations team at WP Engine. He likes building modern web apps with SvelteKit, TypeScript, Tailwind, and AI tools.","url":"https:\/\/wpengine.com\/builders\/author\/kellen-macewpengine-com\/"}]}},"_links":{"self":[{"href":"https:\/\/wpengine.com\/builders\/wp-json\/wp\/v2\/posts\/31861","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wpengine.com\/builders\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wpengine.com\/builders\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wpengine.com\/builders\/wp-json\/wp\/v2\/users\/8"}],"replies":[{"embeddable":true,"href":"https:\/\/wpengine.com\/builders\/wp-json\/wp\/v2\/comments?post=31861"}],"version-history":[{"count":0,"href":"https:\/\/wpengine.com\/builders\/wp-json\/wp\/v2\/posts\/31861\/revisions"}],"wp:attachment":[{"href":"https:\/\/wpengine.com\/builders\/wp-json\/wp\/v2\/media?parent=31861"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wpengine.com\/builders\/wp-json\/wp\/v2\/categories?post=31861"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wpengine.com\/builders\/wp-json\/wp\/v2\/tags?post=31861"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}