@hostinger/mcp 3.2.0 → 3.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -4,6 +4,36 @@ Generated at release time from the diff between the previous and current
4
4
  build. Tool changes are listed individually; everything else is summarised
5
5
  by area.
6
6
 
7
+ ## v3.2.2 — 2026-10-19
8
+
9
+ ### Operations
10
+
11
+ - Added `hosting_cdn_disable` — Disable CDN
12
+ - Added `hosting_cdn_enable` — Enable CDN
13
+ - Added `hosting_cdn_purge-cache` — Purge CDN cache
14
+ - Added `hosting_cdn_status` — Get CDN status
15
+ - Changed the description of `hosting_cache_clear-website`
16
+
17
+ ### Also in this release
18
+
19
+ - Documentation: `README.md`
20
+ - Request handling and authentication: `src/core/runtime.js`, `src/core/runtime.ts`
21
+ - Build and packaging: `types.d.ts`
22
+
23
+ ## v3.2.1 — 2026-10-19
24
+
25
+ ### Operations
26
+
27
+ - Changed the description of `hosting_websites_list-setups`
28
+ - Changed the description and input schema of `hosting_websites_start-setup`
29
+ - Changed the description and input schema of `wordpress_installations_install`
30
+
31
+ ### Also in this release
32
+
33
+ - Documentation: `README.md`
34
+ - Request handling and authentication: `src/core/runtime.js`, `src/core/runtime.ts`
35
+ - Build and packaging: `types.d.ts`
36
+
7
37
  ## v3.2.0 — 2026-10-19
8
38
 
9
39
  ### Operations
package/README.md CHANGED
@@ -69,7 +69,7 @@ pnpm update -g @hostinger/mcp
69
69
 
70
70
  This package installs the following MCP server commands:
71
71
 
72
- - `hostinger-api-mcp` — unified server over every operation (399 total)
72
+ - `hostinger-api-mcp` — unified server over every operation (403 total)
73
73
  - `hostinger-agency-hosting-mcp` — 42 operations for agency-hosting
74
74
  - `hostinger-agent-readiness-mcp` — 3 operations for agent-readiness
75
75
  - `hostinger-billing-mcp` — 9 operations for billing
@@ -77,7 +77,7 @@ This package installs the following MCP server commands:
77
77
  - `hostinger-domains-mcp` — 42 operations for domains
78
78
  - `hostinger-ecommerce-mcp` — 29 operations for ecommerce
79
79
  - `hostinger-horizons-mcp` — 6 operations for horizons
80
- - `hostinger-hosting-mcp` — 62 operations for hosting
80
+ - `hostinger-hosting-mcp` — 66 operations for hosting
81
81
  - `hostinger-mail-mcp` — 38 operations for mail
82
82
  - `hostinger-reach-mcp` — 56 operations for reach
83
83
  - `hostinger-vps-mcp` — 67 operations for vps
@@ -1833,7 +1833,8 @@ Check deployment status, build status, build logs and why a build failed (failur
1833
1833
  Permanently clears all server-side cache for the website at once. Use it when content was
1834
1834
  updated and needs to be visible immediately, or after making major changes.
1835
1835
 
1836
- Also purges the Hostinger CDN cache when CDN is enabled on the website. For a WordPress
1836
+ Also purges the Hostinger CDN cache when CDN is enabled on the website. To purge only the CDN
1837
+ cache and leave the server cache untouched, use `Purge CDN cache`. For a WordPress
1837
1838
  installation living in a subdirectory, pass the directory query parameter to clear its cache.
1838
1839
 
1839
1840
  - **Method**: `DELETE`
@@ -1861,6 +1862,61 @@ Does nothing if caching is already in the requested state.
1861
1862
  - **Method**: `PATCH`
1862
1863
  - **Path**: `/api/hosting/v1/accounts/{username}/websites/{domain}/cache/toggle`
1863
1864
 
1865
+ #### hosting_cdn_disable
1866
+
1867
+ Turns off the Hostinger CDN for the website domain. Once DNS propagation completes, the
1868
+ website content is served directly from the origin server. Repeating the call is safe; when
1869
+ CDN is already disabled, it applies the DNS change again.
1870
+
1871
+ Returns 422 for platform-managed domains (for example `*.hostingersite.com` and
1872
+ `*.app-preview.com`), where CDN cannot be disabled, even when CDN is already off. Also returns
1873
+ 422 while the account is being moved to another server (retry after the move finishes), or
1874
+ when the CDN provider rejects the change. Returns 404 when the domain is not a website on the
1875
+ account.
1876
+
1877
+ - **Method**: `POST`
1878
+ - **Path**: `/api/hosting/v1/accounts/{username}/websites/{domain}/cdn/disable`
1879
+
1880
+ #### hosting_cdn_enable
1881
+
1882
+ Turns on the Hostinger CDN for the website domain, which speeds up page loads and reduces the
1883
+ load on the server. Works for the main domain, parked domains and subdomains of the account.
1884
+
1885
+ Enabling changes the domain's DNS records and usually takes a few seconds. After that, DNS
1886
+ propagation can take a few more minutes before visitors are served through the CDN.
1887
+
1888
+ Repeating the call is safe, for example after a timeout. When CDN is already enabled, it
1889
+ applies the DNS change again and refreshes the CDN SSL certificate.
1890
+
1891
+ Returns 422 when the account is disabled, while the account is being moved to another
1892
+ server (retry after the move finishes), or when the CDN provider rejects the change.
1893
+ Returns 404 when the domain is not a website on the account.
1894
+
1895
+ - **Method**: `POST`
1896
+ - **Path**: `/api/hosting/v1/accounts/{username}/websites/{domain}/cdn/enable`
1897
+
1898
+ #### hosting_cdn_purge-cache
1899
+
1900
+ Purges the website's content from the Hostinger CDN edge cache only. The origin server cache
1901
+ is not touched; to clear both, use `Clear website cache`.
1902
+
1903
+ Returns 422 when CDN is not enabled on the website. Returns 404 when the domain is not a
1904
+ website on the account.
1905
+
1906
+ - **Method**: `DELETE`
1907
+ - **Path**: `/api/hosting/v1/accounts/{username}/websites/{domain}/cdn/purge`
1908
+
1909
+ #### hosting_cdn_status
1910
+
1911
+ Returns whether the Hostinger CDN is enabled for the website domain. Works for the main
1912
+ domain, parked domains and subdomains of the account.
1913
+
1914
+ The domain must be the exact website name as listed on the account, without a `www.` prefix.
1915
+ Returns 404 when the domain is not a website on the account.
1916
+
1917
+ - **Method**: `GET`
1918
+ - **Path**: `/api/hosting/v1/accounts/{username}/websites/{domain}/cdn/status`
1919
+
1864
1920
  #### hosting_cron-jobs_list
1865
1921
 
1866
1922
  Returns the list of cron jobs configured for the specified account, including their schedule and command.
@@ -2325,8 +2381,9 @@ wait for `status: completed` before uploading files, deploying or creating datab
2325
2381
  `failed` means the setup stopped before finishing or has not reported progress for
2326
2382
  over an hour. Setups older than 24 hours are not listed.
2327
2383
 
2328
- `type` is the website type the setup was started with (`wordpress`, `headless_wordpress`,
2329
- `headless_ecommerce`, `headless_pocketbase`), or `null` for an empty website.
2384
+ `type` is the website type the setup was started with (`wordpress`, `headless_empty`,
2385
+ `headless_wordpress`, `headless_ecommerce`, `headless_pocketbase`), or `null` for an empty
2386
+ website.
2330
2387
 
2331
2388
  - **Method**: `GET`
2332
2389
  - **Path**: `/api/hosting/v1/onboardings`
@@ -2335,17 +2392,25 @@ over an hour. Setups older than 24 hours are not listed.
2335
2392
 
2336
2393
  Starts a website setup on a Web or Cloud hosting order and returns the created setup
2337
2394
  right away; the website itself is provisioned asynchronously. Poll the list website
2338
- setups endpoint with the `domain` filter every 10 to 15 seconds and wait for
2339
- `status: completed` before uploading files, deploying or creating databases.
2395
+ setups endpoint (`hosting_websites_list-setups`) with the `domain` filter every 10 to 15
2396
+ seconds and wait for `status: completed` before uploading files, deploying or creating
2397
+ databases.
2340
2398
 
2341
2399
  Omit `type` for an empty website. `type: wordpress` installs WordPress in the website
2342
2400
  root with the admin user, email and password from `wordpress`, the domain as the site
2343
2401
  title, and `en_US` when `wordpress.language` is omitted. The headless types
2344
- (`headless_wordpress`, `headless_ecommerce`, `headless_pocketbase`) create a headless
2345
- website; `headless_wordpress` additionally installs WordPress into the `cms` directory
2346
- of the website root with generated credentials.
2347
-
2348
- Omit `domain` to set the website up on a generated temporary free subdomain.
2402
+ (`headless_empty`, `headless_wordpress`, `headless_ecommerce`, `headless_pocketbase`)
2403
+ create a headless website; `headless_wordpress` additionally installs WordPress into the
2404
+ `cms` directory of the website root with generated credentials. `headless_empty` installs
2405
+ nothing: WordPress can be added later through
2406
+ `POST /api/hosting/v1/accounts/{username}/wordpress/installations`
2407
+ (`wordpress_installations_install`) with `type: headless`.
2408
+
2409
+ Omit `domain` to set the website up on a generated temporary free subdomain. To know the
2410
+ free subdomain before the call, so a timed-out call can be looked up and retried on the
2411
+ same domain, generate one through `POST /api/hosting/v1/domains/free-subdomains`
2412
+ (`hosting_domains_generate-free-subdomain`) and send it as `domain`. It is accepted for
2413
+ 24 hours, only from the client that generated it.
2349
2414
 
2350
2415
  When the order has no hosting account yet, the setup creates one first, in the datacenter
2351
2416
  given by `datacenter_code` or the order's default datacenter when it is omitted.
@@ -4486,19 +4551,29 @@ database files that have been uploaded to the website's directory.
4486
4551
  Install WordPress on an existing website.
4487
4552
 
4488
4553
  The website must already exist before calling this endpoint. To create a new
4489
- website first, use POST /api/hosting/v1/websites and poll
4490
- GET /api/hosting/v1/websites until it appears.
4491
-
4492
- Call GET /api/hosting/v1/wordpress/installations filtered by username and
4493
- domain before proceeding to check whether WordPress is already installed on
4494
- the target domain/path. If WordPress already exists and `overwrite` is false
4495
- (the default), the async job will fail.
4554
+ website first, use POST /api/hosting/v1/orders/{order_id}/onboardings
4555
+ (`hosting_websites_start-setup`) and poll GET /api/hosting/v1/onboardings
4556
+ (`hosting_websites_list-setups`) with the `domain` filter until its `status` is
4557
+ `completed`.
4558
+
4559
+ Send `type: headless` to turn a headless website (for example one created by
4560
+ `hosting_websites_start-setup` with `type: headless_empty`) into a headless WordPress
4561
+ website: WordPress is installed into the `cms` directory with the Hostinger headless
4562
+ MU plugin and the website is marked as a headless WordPress website. `directory` is
4563
+ not allowed with it. The target website must already be headless: the headless
4564
+ install rewrites the root `.htaccess`, so on any other website the request is
4565
+ rejected with 422.
4566
+
4567
+ Call GET /api/hosting/v1/wordpress/installations (`wordpress_installations_list`)
4568
+ filtered by username and domain before proceeding to check whether WordPress is
4569
+ already installed on the target domain/path. If WordPress already exists and
4570
+ `overwrite` is false (the default), the async job will fail.
4496
4571
 
4497
4572
  This operation is asynchronous: a successful response only means the install
4498
4573
  job has been queued, not that WordPress is ready. Installation typically
4499
- takes 1-2 minutes. Poll GET /api/hosting/v1/wordpress/installations filtered
4500
- by username and domain to track progress. When the installation appears in
4501
- that list, WordPress is ready.
4574
+ takes 1-2 minutes. Poll GET /api/hosting/v1/wordpress/installations
4575
+ (`wordpress_installations_list`) filtered by username and domain to track
4576
+ progress. When the installation appears in that list, WordPress is ready.
4502
4577
 
4503
4578
  Returns 422 when the account already uses all the databases its plan allows,
4504
4579
  unless `database.name` is an existing database on the account.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hostinger-api-mcp",
3
- "version": "3.2.0",
3
+ "version": "3.2.2",
4
4
  "description": "Hostinger API — manage domains, DNS, hosting, VPS, billing and more from Gemini CLI.",
5
5
  "mcpServers": {
6
6
  "hostinger": {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hostinger/mcp",
3
- "version": "3.2.0",
3
+ "version": "3.2.2",
4
4
  "mcpName": "io.github.hostinger/hostinger-api-mcp",
5
5
  "description": "MCP server for Hostinger API",
6
6
  "repository": {
package/server.json CHANGED
@@ -6,12 +6,12 @@
6
6
  "url": "https://github.com/hostinger/api-mcp-server",
7
7
  "source": "github"
8
8
  },
9
- "version": "3.2.0",
9
+ "version": "3.2.2",
10
10
  "packages": [
11
11
  {
12
12
  "registryType": "npm",
13
13
  "identifier": "@hostinger/mcp",
14
- "version": "3.2.0",
14
+ "version": "3.2.2",
15
15
  "transport": {
16
16
  "type": "stdio"
17
17
  },
@@ -66,7 +66,7 @@ const GetSkillRequestSchema = z.object({
66
66
 
67
67
  /**
68
68
  * MCP Server for Hostinger API
69
- * Generated from OpenAPI spec version 2.1.0
69
+ * Generated from OpenAPI spec version 2.1.2
70
70
  */
71
71
  class MCPServer {
72
72
  constructor({ name, version, tools, instructions, skills = [] }) {
@@ -97,7 +97,7 @@ interface Skill { uri: string; frontmatter: Record<string, unknown>; resources:
97
97
 
98
98
  /**
99
99
  * MCP Server for Hostinger API
100
- * Generated from OpenAPI spec version 2.1.0
100
+ * Generated from OpenAPI spec version 2.1.2
101
101
  */
102
102
  class MCPServer {
103
103
  private readonly name: string;
@@ -6165,7 +6165,7 @@ export default [
6165
6165
  "destructiveHint": true,
6166
6166
  "idempotentHint": true
6167
6167
  },
6168
- "description": "Permanently clears all server-side cache for the website at once. Use it when content was\nupdated and needs to be visible immediately, or after making major changes.\n\nAlso purges the Hostinger CDN cache when CDN is enabled on the website. For a WordPress\ninstallation living in a subdirectory, pass the directory query parameter to clear its cache.",
6168
+ "description": "Permanently clears all server-side cache for the website at once. Use it when content was\nupdated and needs to be visible immediately, or after making major changes.\n\nAlso purges the Hostinger CDN cache when CDN is enabled on the website. To purge only the CDN\ncache and leave the server cache untouched, use `Purge CDN cache`. For a WordPress\ninstallation living in a subdirectory, pass the directory query parameter to clear its cache.",
6169
6169
  "method": "DELETE",
6170
6170
  "path": "/api/hosting/v1/accounts/{username}/websites/{domain}/cache/clear",
6171
6171
  "inputSchema": {
@@ -6278,6 +6278,147 @@ export default [
6278
6278
  ],
6279
6279
  "group": "hosting"
6280
6280
  },
6281
+ {
6282
+ "name": "hosting_cdn_disable",
6283
+ "title": "Disable CDN",
6284
+ "annotations": {
6285
+ "title": "Disable CDN",
6286
+ "readOnlyHint": false,
6287
+ "destructiveHint": true
6288
+ },
6289
+ "description": "Turns off the Hostinger CDN for the website domain. Once DNS propagation completes, the\nwebsite content is served directly from the origin server. Repeating the call is safe; when\nCDN is already disabled, it applies the DNS change again.\n\nReturns 422 for platform-managed domains (for example `*.hostingersite.com` and\n`*.app-preview.com`), where CDN cannot be disabled, even when CDN is already off. Also returns\n422 while the account is being moved to another server (retry after the move finishes), or\nwhen the CDN provider rejects the change. Returns 404 when the domain is not a website on the\naccount.",
6290
+ "method": "POST",
6291
+ "path": "/api/hosting/v1/accounts/{username}/websites/{domain}/cdn/disable",
6292
+ "inputSchema": {
6293
+ "type": "object",
6294
+ "properties": {
6295
+ "username": {
6296
+ "type": "string",
6297
+ "description": "username parameter"
6298
+ },
6299
+ "domain": {
6300
+ "type": "string",
6301
+ "description": "Domain name"
6302
+ }
6303
+ },
6304
+ "required": [
6305
+ "username",
6306
+ "domain"
6307
+ ]
6308
+ },
6309
+ "security": [
6310
+ {
6311
+ "apiToken": []
6312
+ }
6313
+ ],
6314
+ "group": "hosting"
6315
+ },
6316
+ {
6317
+ "name": "hosting_cdn_enable",
6318
+ "title": "Enable CDN",
6319
+ "annotations": {
6320
+ "title": "Enable CDN",
6321
+ "readOnlyHint": false,
6322
+ "destructiveHint": false
6323
+ },
6324
+ "description": "Turns on the Hostinger CDN for the website domain, which speeds up page loads and reduces the\nload on the server. Works for the main domain, parked domains and subdomains of the account.\n\nEnabling changes the domain's DNS records and usually takes a few seconds. After that, DNS\npropagation can take a few more minutes before visitors are served through the CDN.\n\nRepeating the call is safe, for example after a timeout. When CDN is already enabled, it\napplies the DNS change again and refreshes the CDN SSL certificate.\n\nReturns 422 when the account is disabled, while the account is being moved to another\nserver (retry after the move finishes), or when the CDN provider rejects the change.\nReturns 404 when the domain is not a website on the account.",
6325
+ "method": "POST",
6326
+ "path": "/api/hosting/v1/accounts/{username}/websites/{domain}/cdn/enable",
6327
+ "inputSchema": {
6328
+ "type": "object",
6329
+ "properties": {
6330
+ "username": {
6331
+ "type": "string",
6332
+ "description": "username parameter"
6333
+ },
6334
+ "domain": {
6335
+ "type": "string",
6336
+ "description": "Domain name"
6337
+ }
6338
+ },
6339
+ "required": [
6340
+ "username",
6341
+ "domain"
6342
+ ]
6343
+ },
6344
+ "security": [
6345
+ {
6346
+ "apiToken": []
6347
+ }
6348
+ ],
6349
+ "group": "hosting"
6350
+ },
6351
+ {
6352
+ "name": "hosting_cdn_purge-cache",
6353
+ "title": "Purge CDN cache",
6354
+ "annotations": {
6355
+ "title": "Purge CDN cache",
6356
+ "readOnlyHint": false,
6357
+ "destructiveHint": true,
6358
+ "idempotentHint": true
6359
+ },
6360
+ "description": "Purges the website's content from the Hostinger CDN edge cache only. The origin server cache\nis not touched; to clear both, use `Clear website cache`.\n\nReturns 422 when CDN is not enabled on the website. Returns 404 when the domain is not a\nwebsite on the account.",
6361
+ "method": "DELETE",
6362
+ "path": "/api/hosting/v1/accounts/{username}/websites/{domain}/cdn/purge",
6363
+ "inputSchema": {
6364
+ "type": "object",
6365
+ "properties": {
6366
+ "username": {
6367
+ "type": "string",
6368
+ "description": "username parameter"
6369
+ },
6370
+ "domain": {
6371
+ "type": "string",
6372
+ "description": "Domain name"
6373
+ }
6374
+ },
6375
+ "required": [
6376
+ "username",
6377
+ "domain"
6378
+ ]
6379
+ },
6380
+ "security": [
6381
+ {
6382
+ "apiToken": []
6383
+ }
6384
+ ],
6385
+ "group": "hosting"
6386
+ },
6387
+ {
6388
+ "name": "hosting_cdn_status",
6389
+ "title": "Get CDN status",
6390
+ "annotations": {
6391
+ "title": "Get CDN status",
6392
+ "readOnlyHint": true,
6393
+ "destructiveHint": false
6394
+ },
6395
+ "description": "Returns whether the Hostinger CDN is enabled for the website domain. Works for the main\ndomain, parked domains and subdomains of the account.\n\nThe domain must be the exact website name as listed on the account, without a `www.` prefix.\nReturns 404 when the domain is not a website on the account.",
6396
+ "method": "GET",
6397
+ "path": "/api/hosting/v1/accounts/{username}/websites/{domain}/cdn/status",
6398
+ "inputSchema": {
6399
+ "type": "object",
6400
+ "properties": {
6401
+ "username": {
6402
+ "type": "string",
6403
+ "description": "username parameter"
6404
+ },
6405
+ "domain": {
6406
+ "type": "string",
6407
+ "description": "Domain name"
6408
+ }
6409
+ },
6410
+ "required": [
6411
+ "username",
6412
+ "domain"
6413
+ ]
6414
+ },
6415
+ "security": [
6416
+ {
6417
+ "apiToken": []
6418
+ }
6419
+ ],
6420
+ "group": "hosting"
6421
+ },
6281
6422
  {
6282
6423
  "name": "hosting_cron-jobs_list",
6283
6424
  "title": "List account cron jobs",
@@ -8708,7 +8849,7 @@ export default [
8708
8849
  "readOnlyHint": true,
8709
8850
  "destructiveHint": false
8710
8851
  },
8711
- "description": "Returns the website setups started in the last 24 hours for the hosting accounts\naccessible to the authenticated client, newest first. Narrow the list with the\n`order_id`, `subscription_id` or `domain` filters.\n\nMeant for polling right after creating a website or starting a website setup: the\nwebsite shows up in the websites list before its server-side setup has finished, and\nwhile the setup is `running` endpoints that operate on that website may respond with\n`404` or `409`. Poll this endpoint with the `domain` filter every 10 to 15 seconds and\nwait for `status: completed` before uploading files, deploying or creating databases.\n`failed` means the setup stopped before finishing or has not reported progress for\nover an hour. Setups older than 24 hours are not listed.\n\n`type` is the website type the setup was started with (`wordpress`, `headless_wordpress`,\n`headless_ecommerce`, `headless_pocketbase`), or `null` for an empty website.",
8852
+ "description": "Returns the website setups started in the last 24 hours for the hosting accounts\naccessible to the authenticated client, newest first. Narrow the list with the\n`order_id`, `subscription_id` or `domain` filters.\n\nMeant for polling right after creating a website or starting a website setup: the\nwebsite shows up in the websites list before its server-side setup has finished, and\nwhile the setup is `running` endpoints that operate on that website may respond with\n`404` or `409`. Poll this endpoint with the `domain` filter every 10 to 15 seconds and\nwait for `status: completed` before uploading files, deploying or creating databases.\n`failed` means the setup stopped before finishing or has not reported progress for\nover an hour. Setups older than 24 hours are not listed.\n\n`type` is the website type the setup was started with (`wordpress`, `headless_empty`,\n`headless_wordpress`, `headless_ecommerce`, `headless_pocketbase`), or `null` for an empty\nwebsite.",
8712
8853
  "method": "GET",
8713
8854
  "path": "/api/hosting/v1/onboardings",
8714
8855
  "inputSchema": {
@@ -8744,7 +8885,7 @@ export default [
8744
8885
  "readOnlyHint": false,
8745
8886
  "destructiveHint": false
8746
8887
  },
8747
- "description": "Starts a website setup on a Web or Cloud hosting order and returns the created setup\nright away; the website itself is provisioned asynchronously. Poll the list website\nsetups endpoint with the `domain` filter every 10 to 15 seconds and wait for\n`status: completed` before uploading files, deploying or creating databases.\n\nOmit `type` for an empty website. `type: wordpress` installs WordPress in the website\nroot with the admin user, email and password from `wordpress`, the domain as the site\ntitle, and `en_US` when `wordpress.language` is omitted. The headless types\n(`headless_wordpress`, `headless_ecommerce`, `headless_pocketbase`) create a headless\nwebsite; `headless_wordpress` additionally installs WordPress into the `cms` directory\nof the website root with generated credentials.\n\nOmit `domain` to set the website up on a generated temporary free subdomain.\n\nWhen the order has no hosting account yet, the setup creates one first, in the datacenter\ngiven by `datacenter_code` or the order's default datacenter when it is omitted.\nReturns 404 when the order does not exist or is not accessible to the authenticated\nclient, and 409 with a `Retry-After` header while a setup for the same domain is still\nrunning.",
8888
+ "description": "Starts a website setup on a Web or Cloud hosting order and returns the created setup\nright away; the website itself is provisioned asynchronously. Poll the list website\nsetups endpoint (`hosting_websites_list-setups`) with the `domain` filter every 10 to 15\nseconds and wait for `status: completed` before uploading files, deploying or creating\ndatabases.\n\nOmit `type` for an empty website. `type: wordpress` installs WordPress in the website\nroot with the admin user, email and password from `wordpress`, the domain as the site\ntitle, and `en_US` when `wordpress.language` is omitted. The headless types\n(`headless_empty`, `headless_wordpress`, `headless_ecommerce`, `headless_pocketbase`)\ncreate a headless website; `headless_wordpress` additionally installs WordPress into the\n`cms` directory of the website root with generated credentials. `headless_empty` installs\nnothing: WordPress can be added later through\n`POST /api/hosting/v1/accounts/{username}/wordpress/installations`\n(`wordpress_installations_install`) with `type: headless`.\n\nOmit `domain` to set the website up on a generated temporary free subdomain. To know the\nfree subdomain before the call, so a timed-out call can be looked up and retried on the\nsame domain, generate one through `POST /api/hosting/v1/domains/free-subdomains`\n(`hosting_domains_generate-free-subdomain`) and send it as `domain`. It is accepted for\n24 hours, only from the client that generated it.\n\nWhen the order has no hosting account yet, the setup creates one first, in the datacenter\ngiven by `datacenter_code` or the order's default datacenter when it is omitted.\nReturns 404 when the order does not exist or is not accessible to the authenticated\nclient, and 409 with a `Retry-After` header while a setup for the same domain is still\nrunning.",
8748
8889
  "method": "POST",
8749
8890
  "path": "/api/hosting/v1/orders/{order_id}/onboardings",
8750
8891
  "inputSchema": {
@@ -8756,9 +8897,10 @@ export default [
8756
8897
  },
8757
8898
  "type": {
8758
8899
  "type": "string",
8759
- "description": "Website type. Omit or `null` for an empty website. `wordpress` installs WordPress in the website root and requires `wordpress`. The headless types (`headless_wordpress`, `headless_ecommerce`, `headless_pocketbase`) create a headless website; `headless_wordpress` additionally installs WordPress into the `cms` directory with generated credentials.",
8900
+ "description": "Website type. Omit or `null` for an empty website. `wordpress` installs WordPress in the website root and requires `wordpress`. The headless types (`headless_empty`, `headless_wordpress`, `headless_ecommerce`, `headless_pocketbase`) create a headless website; `headless_wordpress` additionally installs WordPress into the `cms` directory with generated credentials. `headless_empty` installs nothing, so WordPress can be added later through `POST /api/hosting/v1/accounts/{username}/wordpress/installations` (`wordpress_installations_install`) with `type: headless`.",
8760
8901
  "enum": [
8761
8902
  "wordpress",
8903
+ "headless_empty",
8762
8904
  "headless_wordpress",
8763
8905
  "headless_ecommerce",
8764
8906
  "headless_pocketbase"
@@ -8766,7 +8908,7 @@ export default [
8766
8908
  },
8767
8909
  "domain": {
8768
8910
  "type": "string",
8769
- "description": "Customer-owned domain. Cannot start with \"www.\" and can have at most one subdomain level, e.g. `blog.example.com`. Omit or `null` to set the website up on a generated temporary free subdomain."
8911
+ "description": "Customer-owned domain, or a free subdomain you generated through `POST /api/hosting/v1/domains/free-subdomains` (`hosting_domains_generate-free-subdomain`) in the last 24 hours. Cannot start with \"www.\" and can have at most one subdomain level, e.g. `blog.example.com`. Omit or `null` to set the website up on a generated temporary free subdomain."
8770
8912
  },
8771
8913
  "datacenter_code": {
8772
8914
  "type": "string",
@@ -16593,7 +16735,7 @@ export default [
16593
16735
  "readOnlyHint": false,
16594
16736
  "destructiveHint": false
16595
16737
  },
16596
- "description": "Install WordPress on an existing website.\n\nThe website must already exist before calling this endpoint. To create a new\nwebsite first, use POST /api/hosting/v1/websites and poll\nGET /api/hosting/v1/websites until it appears.\n\nCall GET /api/hosting/v1/wordpress/installations filtered by username and\ndomain before proceeding to check whether WordPress is already installed on\nthe target domain/path. If WordPress already exists and `overwrite` is false\n(the default), the async job will fail.\n\nThis operation is asynchronous: a successful response only means the install\njob has been queued, not that WordPress is ready. Installation typically\ntakes 1-2 minutes. Poll GET /api/hosting/v1/wordpress/installations filtered\nby username and domain to track progress. When the installation appears in\nthat list, WordPress is ready.\n\nReturns 422 when the account already uses all the databases its plan allows,\nunless `database.name` is an existing database on the account.",
16738
+ "description": "Install WordPress on an existing website.\n\nThe website must already exist before calling this endpoint. To create a new\nwebsite first, use POST /api/hosting/v1/orders/{order_id}/onboardings\n(`hosting_websites_start-setup`) and poll GET /api/hosting/v1/onboardings\n(`hosting_websites_list-setups`) with the `domain` filter until its `status` is\n`completed`.\n\nSend `type: headless` to turn a headless website (for example one created by\n`hosting_websites_start-setup` with `type: headless_empty`) into a headless WordPress\nwebsite: WordPress is installed into the `cms` directory with the Hostinger headless\nMU plugin and the website is marked as a headless WordPress website. `directory` is\nnot allowed with it. The target website must already be headless: the headless\ninstall rewrites the root `.htaccess`, so on any other website the request is\nrejected with 422.\n\nCall GET /api/hosting/v1/wordpress/installations (`wordpress_installations_list`)\nfiltered by username and domain before proceeding to check whether WordPress is\nalready installed on the target domain/path. If WordPress already exists and\n`overwrite` is false (the default), the async job will fail.\n\nThis operation is asynchronous: a successful response only means the install\njob has been queued, not that WordPress is ready. Installation typically\ntakes 1-2 minutes. Poll GET /api/hosting/v1/wordpress/installations\n(`wordpress_installations_list`) filtered by username and domain to track\nprogress. When the installation appears in that list, WordPress is ready.\n\nReturns 422 when the account already uses all the databases its plan allows,\nunless `database.name` is an existing database on the account.",
16597
16739
  "method": "POST",
16598
16740
  "path": "/api/hosting/v1/accounts/{username}/wordpress/installations",
16599
16741
  "inputSchema": {
@@ -16615,9 +16757,17 @@ export default [
16615
16757
  "type": "string",
16616
16758
  "description": "WordPress locale. Defaults to en_US when omitted."
16617
16759
  },
16760
+ "type": {
16761
+ "type": "string",
16762
+ "description": "Installation kind; `default` when omitted. `headless` installs WordPress into the `cms` directory with the Hostinger headless MU plugin and marks the website as a headless WordPress website. Accepted only for a website that is already headless, e.g. one created by `POST /api/hosting/v1/orders/{order_id}/onboardings` (`hosting_websites_start-setup`) with `type: headless_empty`; any other website is rejected with 422.",
16763
+ "enum": [
16764
+ "default",
16765
+ "headless"
16766
+ ]
16767
+ },
16618
16768
  "directory": {
16619
16769
  "type": "string",
16620
- "description": "Relative directory to install WordPress into. Defaults to the website root when omitted."
16770
+ "description": "Installation subdirectory relative to the document root; omit for the root. Not allowed with `type: headless`, which always installs into `cms`."
16621
16771
  },
16622
16772
  "overwrite": {
16623
16773
  "type": "boolean",