hostinger-api-mcp 2.2.0 → 2.4.0

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,35 @@ 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
+ ## v2.4.0 — 2026-09-29
8
+
9
+ ### Operations
10
+
11
+ - Added `domains_transfer_start` — Start domain transfer
12
+
13
+ ### Also in this release
14
+
15
+ - Documentation: `README.md`
16
+ - Dependencies: `package-lock.json`
17
+ - Request handling and authentication: `src/core/runtime.js`, `src/core/runtime.ts`
18
+ - Build and packaging: `types.d.ts`
19
+
20
+ ## v2.3.0 — 2026-09-28
21
+
22
+ ### Operations
23
+
24
+ - Added `hosting_websites_list-setups` — List website setups
25
+ - Changed the description of `hosting_databases_create-remote-connection`
26
+ - Changed the description of `hosting_files_generate-upload-url`
27
+ - Changed the description of `hosting_websites_list`
28
+ - Changed the description of `hosting_websites_create`
29
+
30
+ ### Also in this release
31
+
32
+ - Documentation: `README.md`
33
+ - Request handling and authentication: `src/core/runtime.js`, `src/core/runtime.ts`
34
+ - Build and packaging: `types.d.ts`
35
+
7
36
  ## v2.2.0 — 2026-09-28
8
37
 
9
38
  ### Also in this release
package/README.md CHANGED
@@ -69,14 +69,14 @@ 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 (401 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-billing-mcp` — 9 operations for billing
75
75
  - `hostinger-dns-mcp` — 8 operations for dns
76
- - `hostinger-domains-mcp` — 41 operations for domains
76
+ - `hostinger-domains-mcp` — 42 operations for domains
77
77
  - `hostinger-ecommerce-mcp` — 29 operations for ecommerce
78
78
  - `hostinger-horizons-mcp` — 6 operations for horizons
79
- - `hostinger-hosting-mcp` — 74 operations for hosting
79
+ - `hostinger-hosting-mcp` — 75 operations for hosting
80
80
  - `hostinger-mail-mcp` — 38 operations for mail
81
81
  - `hostinger-reach-mcp` — 52 operations for reach
82
82
  - `hostinger-vps-mcp` — 64 operations for vps
@@ -1310,6 +1310,26 @@ Use this endpoint to monitor incoming and outgoing registrar transfers across yo
1310
1310
  - **Method**: `GET`
1311
1311
  - **Path**: `/api/domains/v1/transfers`
1312
1312
 
1313
+ #### domains_transfer_start
1314
+
1315
+ Transfer a domain from another registrar to your account.
1316
+
1317
+ The transfer runs on a domain transfer service you have already purchased.
1318
+
1319
+ Before making request, unlock the domain at the current registrar and get its authorization
1320
+ code.
1321
+
1322
+ A successful response means the transfer has been started. Completion depends on the current
1323
+ registrar and can be followed with the [transfer list endpoint](#tag/domains-transfer).
1324
+
1325
+ If no WHOIS information is provided, default contact information for that TLD will be used.
1326
+ Before making request, ensure WHOIS information for desired TLD exists in your account.
1327
+
1328
+ Use this endpoint to bring domains registered elsewhere into your account.
1329
+
1330
+ - **Method**: `POST`
1331
+ - **Path**: `/api/domains/v1/transfers`
1332
+
1313
1333
  #### domains_whois_change-for
1314
1334
 
1315
1335
  Change WHOIS contact profile for a domain.
@@ -1904,7 +1924,9 @@ The database name must be the full name returned by the list databases endpoint.
1904
1924
  Allows a remote host to connect to the specified database.
1905
1925
 
1906
1926
  Provide an IPv4/IPv6 address, or "%" to allow any host. The database name must be
1907
- the full name returned by the list databases endpoint.
1927
+ the full name returned by the list databases endpoint. Database creation is synchronous,
1928
+ so a 404 here means no database with that name exists under the username, not that it
1929
+ is still being created.
1908
1930
 
1909
1931
  - **Method**: `POST`
1910
1932
  - **Path**: `/api/hosting/v1/accounts/{username}/databases/{name}/remote-connections`
@@ -2072,6 +2094,10 @@ Skip this verification when using Hostinger's free subdomains (*.hostingersite.c
2072
2094
  Generate a file browser upload URL with authentication credentials
2073
2095
  for uploading files directly to a website's file storage.
2074
2096
 
2097
+ While the website is still being set up (`status: running` on the list website setups
2098
+ endpoint) this endpoint returns 409 with a `Retry-After` header: wait that many
2099
+ seconds and retry, or poll the website setups until the status is `completed`.
2100
+
2075
2101
  Returns `url`, `auth_key` and `rest_auth_key`. Use these to upload a file to the
2076
2102
  website's `public_html` directory via the TUS resumable upload protocol (TUS 1.0.0).
2077
2103
  Send `X-Auth: {auth_key}` and `X-Auth-Rest: {rest_auth_key}` headers on every request
@@ -2433,6 +2459,22 @@ close or merge it before patching again. Available on Business and Cloud Hosting
2433
2459
  - **Method**: `POST`
2434
2460
  - **Path**: `/api/hosting/v1/accounts/{username}/websites/{domain}/nodejs/vulnerabilities/patch`
2435
2461
 
2462
+ #### hosting_websites_list-setups
2463
+
2464
+ Returns the website setups started in the last 24 hours for the hosting accounts
2465
+ accessible to the authenticated client, newest first.
2466
+
2467
+ Meant for polling right after creating a website: the website shows up in the
2468
+ websites list before its server-side setup has finished, and while the setup is
2469
+ `running` endpoints that operate on that website may respond with `404` or `409`.
2470
+ Poll this endpoint with the `domain` filter every 10 to 15 seconds and wait for
2471
+ `status: completed` before uploading files, deploying or creating databases.
2472
+ `failed` means the setup stopped before finishing or has not reported progress for
2473
+ over an hour. Setups older than 24 hours are not listed.
2474
+
2475
+ - **Method**: `GET`
2476
+ - **Path**: `/api/hosting/v1/onboardings`
2477
+
2436
2478
  #### hosting_orders_list
2437
2479
 
2438
2480
  Retrieve a paginated list of orders accessible to the authenticated client.
@@ -2602,6 +2644,11 @@ WordPress websites (`website_types=wordpress`) or only Node.js websites
2602
2644
  filter by username, order ID, enabled status, or domain name for more targeted
2603
2645
  results.
2604
2646
 
2647
+ A website appears in this list before its server-side setup has finished, and
2648
+ `is_enabled` reflects suspension, not readiness. To know when a newly created website
2649
+ is ready for file, deploy or database operations, poll the list website setups
2650
+ endpoint instead.
2651
+
2605
2652
  - **Method**: `GET`
2606
2653
  - **Path**: `/api/hosting/v1/websites`
2607
2654
 
@@ -2619,8 +2666,11 @@ in the selected datacenter.
2619
2666
 
2620
2667
  Subsequent websites will be hosted on the same datacenter automatically.
2621
2668
 
2622
- Website creation takes up to a few minutes to complete. Check the
2623
- websites list endpoint to see when your new website becomes available.
2669
+ Website creation is asynchronous and takes up to a few minutes. Poll the list website
2670
+ setups endpoint with the `domain` filter every 10 to 15 seconds and wait for `status:
2671
+ completed` before uploading files, deploying or creating databases. While the setup is
2672
+ `running`, endpoints that operate on the website may respond with `404` or `409`.
2673
+ `is_enabled` on the websites list reflects suspension, not readiness.
2624
2674
 
2625
2675
  - **Method**: `POST`
2626
2676
  - **Path**: `/api/hosting/v1/websites`
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hostinger-api-mcp",
3
- "version": "2.2.0",
3
+ "version": "2.4.0",
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-api-mcp",
3
- "version": "2.2.0",
3
+ "version": "2.4.0",
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": "2.2.0",
9
+ "version": "2.4.0",
10
10
  "packages": [
11
11
  {
12
12
  "registryType": "npm",
13
13
  "identifier": "@hostinger/mcp",
14
- "version": "2.2.0",
14
+ "version": "2.4.0",
15
15
  "transport": {
16
16
  "type": "stdio"
17
17
  },
@@ -64,7 +64,7 @@ const GetSkillRequestSchema = z.object({
64
64
 
65
65
  /**
66
66
  * MCP Server for Hostinger API
67
- * Generated from OpenAPI spec version 1.54.2
67
+ * Generated from OpenAPI spec version 1.56.0
68
68
  */
69
69
  class MCPServer {
70
70
  constructor({ name, version, tools, instructions, skills = [] }) {
@@ -94,7 +94,7 @@ interface Skill { uri: string; frontmatter: Record<string, unknown>; resources:
94
94
 
95
95
  /**
96
96
  * MCP Server for Hostinger API
97
- * Generated from OpenAPI spec version 1.54.2
97
+ * Generated from OpenAPI spec version 1.56.0
98
98
  */
99
99
  class MCPServer {
100
100
  private readonly name: string;
@@ -3830,6 +3830,67 @@ export default [
3830
3830
  ],
3831
3831
  "group": "domains"
3832
3832
  },
3833
+ {
3834
+ "name": "domains_transfer_start",
3835
+ "title": "Start domain transfer",
3836
+ "annotations": {
3837
+ "title": "Start domain transfer",
3838
+ "readOnlyHint": false,
3839
+ "destructiveHint": false
3840
+ },
3841
+ "description": "Transfer a domain from another registrar to your account.\n\nThe transfer runs on a domain transfer service you have already purchased.\n\nBefore making request, unlock the domain at the current registrar and get its authorization\ncode.\n\nA successful response means the transfer has been started. Completion depends on the current\nregistrar and can be followed with the [transfer list endpoint](#tag/domains-transfer).\n\nIf no WHOIS information is provided, default contact information for that TLD will be used.\nBefore making request, ensure WHOIS information for desired TLD exists in your account.\n\nUse this endpoint to bring domains registered elsewhere into your account.",
3842
+ "method": "POST",
3843
+ "path": "/api/domains/v1/transfers",
3844
+ "inputSchema": {
3845
+ "type": "object",
3846
+ "properties": {
3847
+ "domain": {
3848
+ "type": "string",
3849
+ "description": "Domain name"
3850
+ },
3851
+ "auth_code": {
3852
+ "type": "string",
3853
+ "description": "Authorization code from the current registrar"
3854
+ },
3855
+ "domain_contacts": {
3856
+ "type": "object",
3857
+ "description": "Domain contact information",
3858
+ "properties": {
3859
+ "owner_id": {
3860
+ "type": "integer",
3861
+ "description": "Owner contact WHOIS record ID"
3862
+ },
3863
+ "admin_id": {
3864
+ "type": "integer",
3865
+ "description": "Administrative contact WHOIS record ID"
3866
+ },
3867
+ "billing_id": {
3868
+ "type": "integer",
3869
+ "description": "Billing contact WHOIS record ID"
3870
+ },
3871
+ "tech_id": {
3872
+ "type": "integer",
3873
+ "description": "Technical contact WHOIS record ID"
3874
+ }
3875
+ }
3876
+ },
3877
+ "should_keep_ns": {
3878
+ "type": "boolean",
3879
+ "description": "Keep the existing nameservers of the domain"
3880
+ }
3881
+ },
3882
+ "required": [
3883
+ "domain",
3884
+ "auth_code"
3885
+ ]
3886
+ },
3887
+ "security": [
3888
+ {
3889
+ "apiToken": []
3890
+ }
3891
+ ],
3892
+ "group": "domains"
3893
+ },
3833
3894
  {
3834
3895
  "name": "domains_whois_change-for",
3835
3896
  "title": "Change WHOIS profile for domain",
@@ -6208,7 +6269,7 @@ export default [
6208
6269
  "readOnlyHint": false,
6209
6270
  "destructiveHint": false
6210
6271
  },
6211
- "description": "Allows a remote host to connect to the specified database.\n\nProvide an IPv4/IPv6 address, or \"%\" to allow any host. The database name must be\nthe full name returned by the list databases endpoint.",
6272
+ "description": "Allows a remote host to connect to the specified database.\n\nProvide an IPv4/IPv6 address, or \"%\" to allow any host. The database name must be\nthe full name returned by the list databases endpoint. Database creation is synchronous,\nso a 404 here means no database with that name exists under the username, not that it\nis still being created.",
6212
6273
  "method": "POST",
6213
6274
  "path": "/api/hosting/v1/accounts/{username}/databases/{name}/remote-connections",
6214
6275
  "inputSchema": {
@@ -6760,7 +6821,7 @@ export default [
6760
6821
  "readOnlyHint": false,
6761
6822
  "destructiveHint": false
6762
6823
  },
6763
- "description": "Generate a file browser upload URL with authentication credentials\nfor uploading files directly to a website's file storage.\n\nReturns `url`, `auth_key` and `rest_auth_key`. Use these to upload a file to the\nwebsite's `public_html` directory via the TUS resumable upload protocol (TUS 1.0.0).\nSend `X-Auth: {auth_key}` and `X-Auth-Rest: {rest_auth_key}` headers on every request\nbelow.\n\n1. Create the upload: `POST` to `{url}/{relative_file_path}?override=true` with headers\n `upload-length: {file size in bytes}` and `upload-offset: 0`. Expect `201 Created`.\n2. Upload the file: send the file bytes to the same location (any TUS 1.0.0 client, or\n `PATCH` requests with an `upload-offset` header tracking progress) until complete.\n\n`relative_file_path` is the destination path inside `public_html`, e.g. `app.zip`.\n\nInstead of a TUS client, plain `curl` also works:\n```\nFILE=app.zip\nSIZE=$(stat -f%z \"$FILE\") # stat -c%s on Linux\n\ncurl -i -X POST \"{url}/${FILE}?override=true\" \\\n -H \"X-Auth: {auth_key}\" \\\n -H \"X-Auth-Rest: {rest_auth_key}\" \\\n -H \"Tus-Resumable: 1.0.0\" \\\n -H \"Upload-Length: ${SIZE}\" \\\n -H \"Upload-Offset: 0\"\n# -> 201 Created\n\ncurl -i -X PATCH \"{url}/${FILE}?override=true\" \\\n -H \"X-Auth: {auth_key}\" \\\n -H \"X-Auth-Rest: {rest_auth_key}\" \\\n -H \"Tus-Resumable: 1.0.0\" \\\n -H \"Content-Type: application/offset+octet-stream\" \\\n -H \"Upload-Offset: 0\" \\\n --data-binary \"@${FILE}\"\n# -> 204 No Content, Upload-Offset response header equals SIZE when done\n```",
6824
+ "description": "Generate a file browser upload URL with authentication credentials\nfor uploading files directly to a website's file storage.\n\nWhile the website is still being set up (`status: running` on the list website setups\nendpoint) this endpoint returns 409 with a `Retry-After` header: wait that many\nseconds and retry, or poll the website setups until the status is `completed`.\n\nReturns `url`, `auth_key` and `rest_auth_key`. Use these to upload a file to the\nwebsite's `public_html` directory via the TUS resumable upload protocol (TUS 1.0.0).\nSend `X-Auth: {auth_key}` and `X-Auth-Rest: {rest_auth_key}` headers on every request\nbelow.\n\n1. Create the upload: `POST` to `{url}/{relative_file_path}?override=true` with headers\n `upload-length: {file size in bytes}` and `upload-offset: 0`. Expect `201 Created`.\n2. Upload the file: send the file bytes to the same location (any TUS 1.0.0 client, or\n `PATCH` requests with an `upload-offset` header tracking progress) until complete.\n\n`relative_file_path` is the destination path inside `public_html`, e.g. `app.zip`.\n\nInstead of a TUS client, plain `curl` also works:\n```\nFILE=app.zip\nSIZE=$(stat -f%z \"$FILE\") # stat -c%s on Linux\n\ncurl -i -X POST \"{url}/${FILE}?override=true\" \\\n -H \"X-Auth: {auth_key}\" \\\n -H \"X-Auth-Rest: {rest_auth_key}\" \\\n -H \"Tus-Resumable: 1.0.0\" \\\n -H \"Upload-Length: ${SIZE}\" \\\n -H \"Upload-Offset: 0\"\n# -> 201 Created\n\ncurl -i -X PATCH \"{url}/${FILE}?override=true\" \\\n -H \"X-Auth: {auth_key}\" \\\n -H \"X-Auth-Rest: {rest_auth_key}\" \\\n -H \"Tus-Resumable: 1.0.0\" \\\n -H \"Content-Type: application/offset+octet-stream\" \\\n -H \"Upload-Offset: 0\" \\\n --data-binary \"@${FILE}\"\n# -> 204 No Content, Upload-Offset response header equals SIZE when done\n```",
6764
6825
  "method": "POST",
6765
6826
  "path": "/api/hosting/v1/files/upload-urls",
6766
6827
  "inputSchema": {
@@ -7924,6 +7985,34 @@ export default [
7924
7985
  ],
7925
7986
  "group": "hosting"
7926
7987
  },
7988
+ {
7989
+ "name": "hosting_websites_list-setups",
7990
+ "title": "List website setups",
7991
+ "annotations": {
7992
+ "title": "List website setups",
7993
+ "readOnlyHint": true,
7994
+ "destructiveHint": false
7995
+ },
7996
+ "description": "Returns the website setups started in the last 24 hours for the hosting accounts\naccessible to the authenticated client, newest first.\n\nMeant for polling right after creating a website: the website shows up in the\nwebsites list before its server-side setup has finished, and while the setup is\n`running` endpoints that operate on that website may respond with `404` or `409`.\nPoll this endpoint with the `domain` filter every 10 to 15 seconds and wait for\n`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.",
7997
+ "method": "GET",
7998
+ "path": "/api/hosting/v1/onboardings",
7999
+ "inputSchema": {
8000
+ "type": "object",
8001
+ "properties": {
8002
+ "domain": {
8003
+ "type": "string",
8004
+ "description": "Filter by domain name (exact match)"
8005
+ }
8006
+ },
8007
+ "required": []
8008
+ },
8009
+ "security": [
8010
+ {
8011
+ "apiToken": []
8012
+ }
8013
+ ],
8014
+ "group": "hosting"
8015
+ },
7927
8016
  {
7928
8017
  "name": "hosting_orders_list",
7929
8018
  "title": "List orders",
@@ -8503,7 +8592,7 @@ export default [
8503
8592
  "readOnlyHint": true,
8504
8593
  "destructiveHint": false
8505
8594
  },
8506
- "description": "Retrieve a paginated list of websites (CloudLinux, Builder, and Horizons) accessible to the\nauthenticated client.\n\nThis endpoint returns websites from your hosting accounts as well as\nwebsites from other client hosting accounts that have shared access\nwith you.\n\nEach website includes a `website_type` field describing the type of\nwebsite detected on the underlying platform (`wordpress`, `builder`,\n`horizons`, `nodejs`, or `other`). Some fields, such as\n`vhost_type`, `username`, and `root_directory`, only apply to\nCloudLinux websites and are null for other platforms.\n\nUse `website_types` to list only websites of a given detected type, e.g. only\nWordPress websites (`website_types=wordpress`) or only Node.js websites\n(`website_types=nodejs`). Combine with the other available query parameters to\nfilter by username, order ID, enabled status, or domain name for more targeted\nresults.",
8595
+ "description": "Retrieve a paginated list of websites (CloudLinux, Builder, and Horizons) accessible to the\nauthenticated client.\n\nThis endpoint returns websites from your hosting accounts as well as\nwebsites from other client hosting accounts that have shared access\nwith you.\n\nEach website includes a `website_type` field describing the type of\nwebsite detected on the underlying platform (`wordpress`, `builder`,\n`horizons`, `nodejs`, or `other`). Some fields, such as\n`vhost_type`, `username`, and `root_directory`, only apply to\nCloudLinux websites and are null for other platforms.\n\nUse `website_types` to list only websites of a given detected type, e.g. only\nWordPress websites (`website_types=wordpress`) or only Node.js websites\n(`website_types=nodejs`). Combine with the other available query parameters to\nfilter by username, order ID, enabled status, or domain name for more targeted\nresults.\n\nA website appears in this list before its server-side setup has finished, and\n`is_enabled` reflects suspension, not readiness. To know when a newly created website\nis ready for file, deploy or database operations, poll the list website setups\nendpoint instead.",
8507
8596
  "method": "GET",
8508
8597
  "path": "/api/hosting/v1/websites",
8509
8598
  "inputSchema": {
@@ -8566,7 +8655,7 @@ export default [
8566
8655
  "readOnlyHint": false,
8567
8656
  "destructiveHint": false
8568
8657
  },
8569
- "description": "Create a new website for the authenticated client.\n\nYou must choose which hosting order to create this website on. Pass that\norder as `order_id` together with the domain name. List orders to see\navailable IDs; the website is provisioned on that order's hosting plan.\n\nThe datacenter_code parameter is required when creating the first website\non a new hosting plan - this will set up and configure new hosting account\nin the selected datacenter.\n\nSubsequent websites will be hosted on the same datacenter automatically.\n\nWebsite creation takes up to a few minutes to complete. Check the\nwebsites list endpoint to see when your new website becomes available.",
8658
+ "description": "Create a new website for the authenticated client.\n\nYou must choose which hosting order to create this website on. Pass that\norder as `order_id` together with the domain name. List orders to see\navailable IDs; the website is provisioned on that order's hosting plan.\n\nThe datacenter_code parameter is required when creating the first website\non a new hosting plan - this will set up and configure new hosting account\nin the selected datacenter.\n\nSubsequent websites will be hosted on the same datacenter automatically.\n\nWebsite creation is asynchronous and takes up to a few minutes. Poll the list website\nsetups endpoint with the `domain` filter every 10 to 15 seconds and wait for `status:\ncompleted` before uploading files, deploying or creating databases. While the setup is\n`running`, endpoints that operate on the website may respond with `404` or `409`.\n`is_enabled` on the websites list reflects suspension, not readiness.",
8570
8659
  "method": "POST",
8571
8660
  "path": "/api/hosting/v1/websites",
8572
8661
  "inputSchema": {
@@ -3844,6 +3844,67 @@ const tools: OpenApiTool[] = [
3844
3844
  ],
3845
3845
  "group": "domains"
3846
3846
  },
3847
+ {
3848
+ "name": "domains_transfer_start",
3849
+ "title": "Start domain transfer",
3850
+ "annotations": {
3851
+ "title": "Start domain transfer",
3852
+ "readOnlyHint": false,
3853
+ "destructiveHint": false
3854
+ },
3855
+ "description": "Transfer a domain from another registrar to your account.\n\nThe transfer runs on a domain transfer service you have already purchased.\n\nBefore making request, unlock the domain at the current registrar and get its authorization\ncode.\n\nA successful response means the transfer has been started. Completion depends on the current\nregistrar and can be followed with the [transfer list endpoint](#tag/domains-transfer).\n\nIf no WHOIS information is provided, default contact information for that TLD will be used.\nBefore making request, ensure WHOIS information for desired TLD exists in your account.\n\nUse this endpoint to bring domains registered elsewhere into your account.",
3856
+ "method": "POST",
3857
+ "path": "/api/domains/v1/transfers",
3858
+ "inputSchema": {
3859
+ "type": "object",
3860
+ "properties": {
3861
+ "domain": {
3862
+ "type": "string",
3863
+ "description": "Domain name"
3864
+ },
3865
+ "auth_code": {
3866
+ "type": "string",
3867
+ "description": "Authorization code from the current registrar"
3868
+ },
3869
+ "domain_contacts": {
3870
+ "type": "object",
3871
+ "description": "Domain contact information",
3872
+ "properties": {
3873
+ "owner_id": {
3874
+ "type": "integer",
3875
+ "description": "Owner contact WHOIS record ID"
3876
+ },
3877
+ "admin_id": {
3878
+ "type": "integer",
3879
+ "description": "Administrative contact WHOIS record ID"
3880
+ },
3881
+ "billing_id": {
3882
+ "type": "integer",
3883
+ "description": "Billing contact WHOIS record ID"
3884
+ },
3885
+ "tech_id": {
3886
+ "type": "integer",
3887
+ "description": "Technical contact WHOIS record ID"
3888
+ }
3889
+ }
3890
+ },
3891
+ "should_keep_ns": {
3892
+ "type": "boolean",
3893
+ "description": "Keep the existing nameservers of the domain"
3894
+ }
3895
+ },
3896
+ "required": [
3897
+ "domain",
3898
+ "auth_code"
3899
+ ]
3900
+ },
3901
+ "security": [
3902
+ {
3903
+ "apiToken": []
3904
+ }
3905
+ ],
3906
+ "group": "domains"
3907
+ },
3847
3908
  {
3848
3909
  "name": "domains_whois_change-for",
3849
3910
  "title": "Change WHOIS profile for domain",
@@ -6222,7 +6283,7 @@ const tools: OpenApiTool[] = [
6222
6283
  "readOnlyHint": false,
6223
6284
  "destructiveHint": false
6224
6285
  },
6225
- "description": "Allows a remote host to connect to the specified database.\n\nProvide an IPv4/IPv6 address, or \"%\" to allow any host. The database name must be\nthe full name returned by the list databases endpoint.",
6286
+ "description": "Allows a remote host to connect to the specified database.\n\nProvide an IPv4/IPv6 address, or \"%\" to allow any host. The database name must be\nthe full name returned by the list databases endpoint. Database creation is synchronous,\nso a 404 here means no database with that name exists under the username, not that it\nis still being created.",
6226
6287
  "method": "POST",
6227
6288
  "path": "/api/hosting/v1/accounts/{username}/databases/{name}/remote-connections",
6228
6289
  "inputSchema": {
@@ -6774,7 +6835,7 @@ const tools: OpenApiTool[] = [
6774
6835
  "readOnlyHint": false,
6775
6836
  "destructiveHint": false
6776
6837
  },
6777
- "description": "Generate a file browser upload URL with authentication credentials\nfor uploading files directly to a website's file storage.\n\nReturns `url`, `auth_key` and `rest_auth_key`. Use these to upload a file to the\nwebsite's `public_html` directory via the TUS resumable upload protocol (TUS 1.0.0).\nSend `X-Auth: {auth_key}` and `X-Auth-Rest: {rest_auth_key}` headers on every request\nbelow.\n\n1. Create the upload: `POST` to `{url}/{relative_file_path}?override=true` with headers\n `upload-length: {file size in bytes}` and `upload-offset: 0`. Expect `201 Created`.\n2. Upload the file: send the file bytes to the same location (any TUS 1.0.0 client, or\n `PATCH` requests with an `upload-offset` header tracking progress) until complete.\n\n`relative_file_path` is the destination path inside `public_html`, e.g. `app.zip`.\n\nInstead of a TUS client, plain `curl` also works:\n```\nFILE=app.zip\nSIZE=$(stat -f%z \"$FILE\") # stat -c%s on Linux\n\ncurl -i -X POST \"{url}/${FILE}?override=true\" \\\n -H \"X-Auth: {auth_key}\" \\\n -H \"X-Auth-Rest: {rest_auth_key}\" \\\n -H \"Tus-Resumable: 1.0.0\" \\\n -H \"Upload-Length: ${SIZE}\" \\\n -H \"Upload-Offset: 0\"\n# -> 201 Created\n\ncurl -i -X PATCH \"{url}/${FILE}?override=true\" \\\n -H \"X-Auth: {auth_key}\" \\\n -H \"X-Auth-Rest: {rest_auth_key}\" \\\n -H \"Tus-Resumable: 1.0.0\" \\\n -H \"Content-Type: application/offset+octet-stream\" \\\n -H \"Upload-Offset: 0\" \\\n --data-binary \"@${FILE}\"\n# -> 204 No Content, Upload-Offset response header equals SIZE when done\n```",
6838
+ "description": "Generate a file browser upload URL with authentication credentials\nfor uploading files directly to a website's file storage.\n\nWhile the website is still being set up (`status: running` on the list website setups\nendpoint) this endpoint returns 409 with a `Retry-After` header: wait that many\nseconds and retry, or poll the website setups until the status is `completed`.\n\nReturns `url`, `auth_key` and `rest_auth_key`. Use these to upload a file to the\nwebsite's `public_html` directory via the TUS resumable upload protocol (TUS 1.0.0).\nSend `X-Auth: {auth_key}` and `X-Auth-Rest: {rest_auth_key}` headers on every request\nbelow.\n\n1. Create the upload: `POST` to `{url}/{relative_file_path}?override=true` with headers\n `upload-length: {file size in bytes}` and `upload-offset: 0`. Expect `201 Created`.\n2. Upload the file: send the file bytes to the same location (any TUS 1.0.0 client, or\n `PATCH` requests with an `upload-offset` header tracking progress) until complete.\n\n`relative_file_path` is the destination path inside `public_html`, e.g. `app.zip`.\n\nInstead of a TUS client, plain `curl` also works:\n```\nFILE=app.zip\nSIZE=$(stat -f%z \"$FILE\") # stat -c%s on Linux\n\ncurl -i -X POST \"{url}/${FILE}?override=true\" \\\n -H \"X-Auth: {auth_key}\" \\\n -H \"X-Auth-Rest: {rest_auth_key}\" \\\n -H \"Tus-Resumable: 1.0.0\" \\\n -H \"Upload-Length: ${SIZE}\" \\\n -H \"Upload-Offset: 0\"\n# -> 201 Created\n\ncurl -i -X PATCH \"{url}/${FILE}?override=true\" \\\n -H \"X-Auth: {auth_key}\" \\\n -H \"X-Auth-Rest: {rest_auth_key}\" \\\n -H \"Tus-Resumable: 1.0.0\" \\\n -H \"Content-Type: application/offset+octet-stream\" \\\n -H \"Upload-Offset: 0\" \\\n --data-binary \"@${FILE}\"\n# -> 204 No Content, Upload-Offset response header equals SIZE when done\n```",
6778
6839
  "method": "POST",
6779
6840
  "path": "/api/hosting/v1/files/upload-urls",
6780
6841
  "inputSchema": {
@@ -7938,6 +7999,34 @@ const tools: OpenApiTool[] = [
7938
7999
  ],
7939
8000
  "group": "hosting"
7940
8001
  },
8002
+ {
8003
+ "name": "hosting_websites_list-setups",
8004
+ "title": "List website setups",
8005
+ "annotations": {
8006
+ "title": "List website setups",
8007
+ "readOnlyHint": true,
8008
+ "destructiveHint": false
8009
+ },
8010
+ "description": "Returns the website setups started in the last 24 hours for the hosting accounts\naccessible to the authenticated client, newest first.\n\nMeant for polling right after creating a website: the website shows up in the\nwebsites list before its server-side setup has finished, and while the setup is\n`running` endpoints that operate on that website may respond with `404` or `409`.\nPoll this endpoint with the `domain` filter every 10 to 15 seconds and wait for\n`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.",
8011
+ "method": "GET",
8012
+ "path": "/api/hosting/v1/onboardings",
8013
+ "inputSchema": {
8014
+ "type": "object",
8015
+ "properties": {
8016
+ "domain": {
8017
+ "type": "string",
8018
+ "description": "Filter by domain name (exact match)"
8019
+ }
8020
+ },
8021
+ "required": []
8022
+ },
8023
+ "security": [
8024
+ {
8025
+ "apiToken": []
8026
+ }
8027
+ ],
8028
+ "group": "hosting"
8029
+ },
7941
8030
  {
7942
8031
  "name": "hosting_orders_list",
7943
8032
  "title": "List orders",
@@ -8517,7 +8606,7 @@ const tools: OpenApiTool[] = [
8517
8606
  "readOnlyHint": true,
8518
8607
  "destructiveHint": false
8519
8608
  },
8520
- "description": "Retrieve a paginated list of websites (CloudLinux, Builder, and Horizons) accessible to the\nauthenticated client.\n\nThis endpoint returns websites from your hosting accounts as well as\nwebsites from other client hosting accounts that have shared access\nwith you.\n\nEach website includes a `website_type` field describing the type of\nwebsite detected on the underlying platform (`wordpress`, `builder`,\n`horizons`, `nodejs`, or `other`). Some fields, such as\n`vhost_type`, `username`, and `root_directory`, only apply to\nCloudLinux websites and are null for other platforms.\n\nUse `website_types` to list only websites of a given detected type, e.g. only\nWordPress websites (`website_types=wordpress`) or only Node.js websites\n(`website_types=nodejs`). Combine with the other available query parameters to\nfilter by username, order ID, enabled status, or domain name for more targeted\nresults.",
8609
+ "description": "Retrieve a paginated list of websites (CloudLinux, Builder, and Horizons) accessible to the\nauthenticated client.\n\nThis endpoint returns websites from your hosting accounts as well as\nwebsites from other client hosting accounts that have shared access\nwith you.\n\nEach website includes a `website_type` field describing the type of\nwebsite detected on the underlying platform (`wordpress`, `builder`,\n`horizons`, `nodejs`, or `other`). Some fields, such as\n`vhost_type`, `username`, and `root_directory`, only apply to\nCloudLinux websites and are null for other platforms.\n\nUse `website_types` to list only websites of a given detected type, e.g. only\nWordPress websites (`website_types=wordpress`) or only Node.js websites\n(`website_types=nodejs`). Combine with the other available query parameters to\nfilter by username, order ID, enabled status, or domain name for more targeted\nresults.\n\nA website appears in this list before its server-side setup has finished, and\n`is_enabled` reflects suspension, not readiness. To know when a newly created website\nis ready for file, deploy or database operations, poll the list website setups\nendpoint instead.",
8521
8610
  "method": "GET",
8522
8611
  "path": "/api/hosting/v1/websites",
8523
8612
  "inputSchema": {
@@ -8580,7 +8669,7 @@ const tools: OpenApiTool[] = [
8580
8669
  "readOnlyHint": false,
8581
8670
  "destructiveHint": false
8582
8671
  },
8583
- "description": "Create a new website for the authenticated client.\n\nYou must choose which hosting order to create this website on. Pass that\norder as `order_id` together with the domain name. List orders to see\navailable IDs; the website is provisioned on that order's hosting plan.\n\nThe datacenter_code parameter is required when creating the first website\non a new hosting plan - this will set up and configure new hosting account\nin the selected datacenter.\n\nSubsequent websites will be hosted on the same datacenter automatically.\n\nWebsite creation takes up to a few minutes to complete. Check the\nwebsites list endpoint to see when your new website becomes available.",
8672
+ "description": "Create a new website for the authenticated client.\n\nYou must choose which hosting order to create this website on. Pass that\norder as `order_id` together with the domain name. List orders to see\navailable IDs; the website is provisioned on that order's hosting plan.\n\nThe datacenter_code parameter is required when creating the first website\non a new hosting plan - this will set up and configure new hosting account\nin the selected datacenter.\n\nSubsequent websites will be hosted on the same datacenter automatically.\n\nWebsite creation is asynchronous and takes up to a few minutes. Poll the list website\nsetups endpoint with the `domain` filter every 10 to 15 seconds and wait for `status:\ncompleted` before uploading files, deploying or creating databases. While the setup is\n`running`, endpoints that operate on the website may respond with `404` or `409`.\n`is_enabled` on the websites list reflects suspension, not readiness.",
8584
8673
  "method": "POST",
8585
8674
  "path": "/api/hosting/v1/websites",
8586
8675
  "inputSchema": {
@@ -1202,6 +1202,67 @@ export default [
1202
1202
  ],
1203
1203
  "group": "domains"
1204
1204
  },
1205
+ {
1206
+ "name": "domains_transfer_start",
1207
+ "title": "Start domain transfer",
1208
+ "annotations": {
1209
+ "title": "Start domain transfer",
1210
+ "readOnlyHint": false,
1211
+ "destructiveHint": false
1212
+ },
1213
+ "description": "Transfer a domain from another registrar to your account.\n\nThe transfer runs on a domain transfer service you have already purchased.\n\nBefore making request, unlock the domain at the current registrar and get its authorization\ncode.\n\nA successful response means the transfer has been started. Completion depends on the current\nregistrar and can be followed with the [transfer list endpoint](#tag/domains-transfer).\n\nIf no WHOIS information is provided, default contact information for that TLD will be used.\nBefore making request, ensure WHOIS information for desired TLD exists in your account.\n\nUse this endpoint to bring domains registered elsewhere into your account.",
1214
+ "method": "POST",
1215
+ "path": "/api/domains/v1/transfers",
1216
+ "inputSchema": {
1217
+ "type": "object",
1218
+ "properties": {
1219
+ "domain": {
1220
+ "type": "string",
1221
+ "description": "Domain name"
1222
+ },
1223
+ "auth_code": {
1224
+ "type": "string",
1225
+ "description": "Authorization code from the current registrar"
1226
+ },
1227
+ "domain_contacts": {
1228
+ "type": "object",
1229
+ "description": "Domain contact information",
1230
+ "properties": {
1231
+ "owner_id": {
1232
+ "type": "integer",
1233
+ "description": "Owner contact WHOIS record ID"
1234
+ },
1235
+ "admin_id": {
1236
+ "type": "integer",
1237
+ "description": "Administrative contact WHOIS record ID"
1238
+ },
1239
+ "billing_id": {
1240
+ "type": "integer",
1241
+ "description": "Billing contact WHOIS record ID"
1242
+ },
1243
+ "tech_id": {
1244
+ "type": "integer",
1245
+ "description": "Technical contact WHOIS record ID"
1246
+ }
1247
+ }
1248
+ },
1249
+ "should_keep_ns": {
1250
+ "type": "boolean",
1251
+ "description": "Keep the existing nameservers of the domain"
1252
+ }
1253
+ },
1254
+ "required": [
1255
+ "domain",
1256
+ "auth_code"
1257
+ ]
1258
+ },
1259
+ "security": [
1260
+ {
1261
+ "apiToken": []
1262
+ }
1263
+ ],
1264
+ "group": "domains"
1265
+ },
1205
1266
  {
1206
1267
  "name": "domains_whois_change-for",
1207
1268
  "title": "Change WHOIS profile for domain",
@@ -1216,6 +1216,67 @@ const tools: OpenApiTool[] = [
1216
1216
  ],
1217
1217
  "group": "domains"
1218
1218
  },
1219
+ {
1220
+ "name": "domains_transfer_start",
1221
+ "title": "Start domain transfer",
1222
+ "annotations": {
1223
+ "title": "Start domain transfer",
1224
+ "readOnlyHint": false,
1225
+ "destructiveHint": false
1226
+ },
1227
+ "description": "Transfer a domain from another registrar to your account.\n\nThe transfer runs on a domain transfer service you have already purchased.\n\nBefore making request, unlock the domain at the current registrar and get its authorization\ncode.\n\nA successful response means the transfer has been started. Completion depends on the current\nregistrar and can be followed with the [transfer list endpoint](#tag/domains-transfer).\n\nIf no WHOIS information is provided, default contact information for that TLD will be used.\nBefore making request, ensure WHOIS information for desired TLD exists in your account.\n\nUse this endpoint to bring domains registered elsewhere into your account.",
1228
+ "method": "POST",
1229
+ "path": "/api/domains/v1/transfers",
1230
+ "inputSchema": {
1231
+ "type": "object",
1232
+ "properties": {
1233
+ "domain": {
1234
+ "type": "string",
1235
+ "description": "Domain name"
1236
+ },
1237
+ "auth_code": {
1238
+ "type": "string",
1239
+ "description": "Authorization code from the current registrar"
1240
+ },
1241
+ "domain_contacts": {
1242
+ "type": "object",
1243
+ "description": "Domain contact information",
1244
+ "properties": {
1245
+ "owner_id": {
1246
+ "type": "integer",
1247
+ "description": "Owner contact WHOIS record ID"
1248
+ },
1249
+ "admin_id": {
1250
+ "type": "integer",
1251
+ "description": "Administrative contact WHOIS record ID"
1252
+ },
1253
+ "billing_id": {
1254
+ "type": "integer",
1255
+ "description": "Billing contact WHOIS record ID"
1256
+ },
1257
+ "tech_id": {
1258
+ "type": "integer",
1259
+ "description": "Technical contact WHOIS record ID"
1260
+ }
1261
+ }
1262
+ },
1263
+ "should_keep_ns": {
1264
+ "type": "boolean",
1265
+ "description": "Keep the existing nameservers of the domain"
1266
+ }
1267
+ },
1268
+ "required": [
1269
+ "domain",
1270
+ "auth_code"
1271
+ ]
1272
+ },
1273
+ "security": [
1274
+ {
1275
+ "apiToken": []
1276
+ }
1277
+ ],
1278
+ "group": "domains"
1279
+ },
1219
1280
  {
1220
1281
  "name": "domains_whois_change-for",
1221
1282
  "title": "Change WHOIS profile for domain",
@@ -747,7 +747,7 @@ export default [
747
747
  "readOnlyHint": false,
748
748
  "destructiveHint": false
749
749
  },
750
- "description": "Allows a remote host to connect to the specified database.\n\nProvide an IPv4/IPv6 address, or \"%\" to allow any host. The database name must be\nthe full name returned by the list databases endpoint.",
750
+ "description": "Allows a remote host to connect to the specified database.\n\nProvide an IPv4/IPv6 address, or \"%\" to allow any host. The database name must be\nthe full name returned by the list databases endpoint. Database creation is synchronous,\nso a 404 here means no database with that name exists under the username, not that it\nis still being created.",
751
751
  "method": "POST",
752
752
  "path": "/api/hosting/v1/accounts/{username}/databases/{name}/remote-connections",
753
753
  "inputSchema": {
@@ -1299,7 +1299,7 @@ export default [
1299
1299
  "readOnlyHint": false,
1300
1300
  "destructiveHint": false
1301
1301
  },
1302
- "description": "Generate a file browser upload URL with authentication credentials\nfor uploading files directly to a website's file storage.\n\nReturns `url`, `auth_key` and `rest_auth_key`. Use these to upload a file to the\nwebsite's `public_html` directory via the TUS resumable upload protocol (TUS 1.0.0).\nSend `X-Auth: {auth_key}` and `X-Auth-Rest: {rest_auth_key}` headers on every request\nbelow.\n\n1. Create the upload: `POST` to `{url}/{relative_file_path}?override=true` with headers\n `upload-length: {file size in bytes}` and `upload-offset: 0`. Expect `201 Created`.\n2. Upload the file: send the file bytes to the same location (any TUS 1.0.0 client, or\n `PATCH` requests with an `upload-offset` header tracking progress) until complete.\n\n`relative_file_path` is the destination path inside `public_html`, e.g. `app.zip`.\n\nInstead of a TUS client, plain `curl` also works:\n```\nFILE=app.zip\nSIZE=$(stat -f%z \"$FILE\") # stat -c%s on Linux\n\ncurl -i -X POST \"{url}/${FILE}?override=true\" \\\n -H \"X-Auth: {auth_key}\" \\\n -H \"X-Auth-Rest: {rest_auth_key}\" \\\n -H \"Tus-Resumable: 1.0.0\" \\\n -H \"Upload-Length: ${SIZE}\" \\\n -H \"Upload-Offset: 0\"\n# -> 201 Created\n\ncurl -i -X PATCH \"{url}/${FILE}?override=true\" \\\n -H \"X-Auth: {auth_key}\" \\\n -H \"X-Auth-Rest: {rest_auth_key}\" \\\n -H \"Tus-Resumable: 1.0.0\" \\\n -H \"Content-Type: application/offset+octet-stream\" \\\n -H \"Upload-Offset: 0\" \\\n --data-binary \"@${FILE}\"\n# -> 204 No Content, Upload-Offset response header equals SIZE when done\n```",
1302
+ "description": "Generate a file browser upload URL with authentication credentials\nfor uploading files directly to a website's file storage.\n\nWhile the website is still being set up (`status: running` on the list website setups\nendpoint) this endpoint returns 409 with a `Retry-After` header: wait that many\nseconds and retry, or poll the website setups until the status is `completed`.\n\nReturns `url`, `auth_key` and `rest_auth_key`. Use these to upload a file to the\nwebsite's `public_html` directory via the TUS resumable upload protocol (TUS 1.0.0).\nSend `X-Auth: {auth_key}` and `X-Auth-Rest: {rest_auth_key}` headers on every request\nbelow.\n\n1. Create the upload: `POST` to `{url}/{relative_file_path}?override=true` with headers\n `upload-length: {file size in bytes}` and `upload-offset: 0`. Expect `201 Created`.\n2. Upload the file: send the file bytes to the same location (any TUS 1.0.0 client, or\n `PATCH` requests with an `upload-offset` header tracking progress) until complete.\n\n`relative_file_path` is the destination path inside `public_html`, e.g. `app.zip`.\n\nInstead of a TUS client, plain `curl` also works:\n```\nFILE=app.zip\nSIZE=$(stat -f%z \"$FILE\") # stat -c%s on Linux\n\ncurl -i -X POST \"{url}/${FILE}?override=true\" \\\n -H \"X-Auth: {auth_key}\" \\\n -H \"X-Auth-Rest: {rest_auth_key}\" \\\n -H \"Tus-Resumable: 1.0.0\" \\\n -H \"Upload-Length: ${SIZE}\" \\\n -H \"Upload-Offset: 0\"\n# -> 201 Created\n\ncurl -i -X PATCH \"{url}/${FILE}?override=true\" \\\n -H \"X-Auth: {auth_key}\" \\\n -H \"X-Auth-Rest: {rest_auth_key}\" \\\n -H \"Tus-Resumable: 1.0.0\" \\\n -H \"Content-Type: application/offset+octet-stream\" \\\n -H \"Upload-Offset: 0\" \\\n --data-binary \"@${FILE}\"\n# -> 204 No Content, Upload-Offset response header equals SIZE when done\n```",
1303
1303
  "method": "POST",
1304
1304
  "path": "/api/hosting/v1/files/upload-urls",
1305
1305
  "inputSchema": {
@@ -2463,6 +2463,34 @@ export default [
2463
2463
  ],
2464
2464
  "group": "hosting"
2465
2465
  },
2466
+ {
2467
+ "name": "hosting_websites_list-setups",
2468
+ "title": "List website setups",
2469
+ "annotations": {
2470
+ "title": "List website setups",
2471
+ "readOnlyHint": true,
2472
+ "destructiveHint": false
2473
+ },
2474
+ "description": "Returns the website setups started in the last 24 hours for the hosting accounts\naccessible to the authenticated client, newest first.\n\nMeant for polling right after creating a website: the website shows up in the\nwebsites list before its server-side setup has finished, and while the setup is\n`running` endpoints that operate on that website may respond with `404` or `409`.\nPoll this endpoint with the `domain` filter every 10 to 15 seconds and wait for\n`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.",
2475
+ "method": "GET",
2476
+ "path": "/api/hosting/v1/onboardings",
2477
+ "inputSchema": {
2478
+ "type": "object",
2479
+ "properties": {
2480
+ "domain": {
2481
+ "type": "string",
2482
+ "description": "Filter by domain name (exact match)"
2483
+ }
2484
+ },
2485
+ "required": []
2486
+ },
2487
+ "security": [
2488
+ {
2489
+ "apiToken": []
2490
+ }
2491
+ ],
2492
+ "group": "hosting"
2493
+ },
2466
2494
  {
2467
2495
  "name": "hosting_orders_list",
2468
2496
  "title": "List orders",
@@ -3042,7 +3070,7 @@ export default [
3042
3070
  "readOnlyHint": true,
3043
3071
  "destructiveHint": false
3044
3072
  },
3045
- "description": "Retrieve a paginated list of websites (CloudLinux, Builder, and Horizons) accessible to the\nauthenticated client.\n\nThis endpoint returns websites from your hosting accounts as well as\nwebsites from other client hosting accounts that have shared access\nwith you.\n\nEach website includes a `website_type` field describing the type of\nwebsite detected on the underlying platform (`wordpress`, `builder`,\n`horizons`, `nodejs`, or `other`). Some fields, such as\n`vhost_type`, `username`, and `root_directory`, only apply to\nCloudLinux websites and are null for other platforms.\n\nUse `website_types` to list only websites of a given detected type, e.g. only\nWordPress websites (`website_types=wordpress`) or only Node.js websites\n(`website_types=nodejs`). Combine with the other available query parameters to\nfilter by username, order ID, enabled status, or domain name for more targeted\nresults.",
3073
+ "description": "Retrieve a paginated list of websites (CloudLinux, Builder, and Horizons) accessible to the\nauthenticated client.\n\nThis endpoint returns websites from your hosting accounts as well as\nwebsites from other client hosting accounts that have shared access\nwith you.\n\nEach website includes a `website_type` field describing the type of\nwebsite detected on the underlying platform (`wordpress`, `builder`,\n`horizons`, `nodejs`, or `other`). Some fields, such as\n`vhost_type`, `username`, and `root_directory`, only apply to\nCloudLinux websites and are null for other platforms.\n\nUse `website_types` to list only websites of a given detected type, e.g. only\nWordPress websites (`website_types=wordpress`) or only Node.js websites\n(`website_types=nodejs`). Combine with the other available query parameters to\nfilter by username, order ID, enabled status, or domain name for more targeted\nresults.\n\nA website appears in this list before its server-side setup has finished, and\n`is_enabled` reflects suspension, not readiness. To know when a newly created website\nis ready for file, deploy or database operations, poll the list website setups\nendpoint instead.",
3046
3074
  "method": "GET",
3047
3075
  "path": "/api/hosting/v1/websites",
3048
3076
  "inputSchema": {
@@ -3105,7 +3133,7 @@ export default [
3105
3133
  "readOnlyHint": false,
3106
3134
  "destructiveHint": false
3107
3135
  },
3108
- "description": "Create a new website for the authenticated client.\n\nYou must choose which hosting order to create this website on. Pass that\norder as `order_id` together with the domain name. List orders to see\navailable IDs; the website is provisioned on that order's hosting plan.\n\nThe datacenter_code parameter is required when creating the first website\non a new hosting plan - this will set up and configure new hosting account\nin the selected datacenter.\n\nSubsequent websites will be hosted on the same datacenter automatically.\n\nWebsite creation takes up to a few minutes to complete. Check the\nwebsites list endpoint to see when your new website becomes available.",
3136
+ "description": "Create a new website for the authenticated client.\n\nYou must choose which hosting order to create this website on. Pass that\norder as `order_id` together with the domain name. List orders to see\navailable IDs; the website is provisioned on that order's hosting plan.\n\nThe datacenter_code parameter is required when creating the first website\non a new hosting plan - this will set up and configure new hosting account\nin the selected datacenter.\n\nSubsequent websites will be hosted on the same datacenter automatically.\n\nWebsite creation is asynchronous and takes up to a few minutes. Poll the list website\nsetups endpoint with the `domain` filter every 10 to 15 seconds and wait for `status:\ncompleted` before uploading files, deploying or creating databases. While the setup is\n`running`, endpoints that operate on the website may respond with `404` or `409`.\n`is_enabled` on the websites list reflects suspension, not readiness.",
3109
3137
  "method": "POST",
3110
3138
  "path": "/api/hosting/v1/websites",
3111
3139
  "inputSchema": {
@@ -761,7 +761,7 @@ const tools: OpenApiTool[] = [
761
761
  "readOnlyHint": false,
762
762
  "destructiveHint": false
763
763
  },
764
- "description": "Allows a remote host to connect to the specified database.\n\nProvide an IPv4/IPv6 address, or \"%\" to allow any host. The database name must be\nthe full name returned by the list databases endpoint.",
764
+ "description": "Allows a remote host to connect to the specified database.\n\nProvide an IPv4/IPv6 address, or \"%\" to allow any host. The database name must be\nthe full name returned by the list databases endpoint. Database creation is synchronous,\nso a 404 here means no database with that name exists under the username, not that it\nis still being created.",
765
765
  "method": "POST",
766
766
  "path": "/api/hosting/v1/accounts/{username}/databases/{name}/remote-connections",
767
767
  "inputSchema": {
@@ -1313,7 +1313,7 @@ const tools: OpenApiTool[] = [
1313
1313
  "readOnlyHint": false,
1314
1314
  "destructiveHint": false
1315
1315
  },
1316
- "description": "Generate a file browser upload URL with authentication credentials\nfor uploading files directly to a website's file storage.\n\nReturns `url`, `auth_key` and `rest_auth_key`. Use these to upload a file to the\nwebsite's `public_html` directory via the TUS resumable upload protocol (TUS 1.0.0).\nSend `X-Auth: {auth_key}` and `X-Auth-Rest: {rest_auth_key}` headers on every request\nbelow.\n\n1. Create the upload: `POST` to `{url}/{relative_file_path}?override=true` with headers\n `upload-length: {file size in bytes}` and `upload-offset: 0`. Expect `201 Created`.\n2. Upload the file: send the file bytes to the same location (any TUS 1.0.0 client, or\n `PATCH` requests with an `upload-offset` header tracking progress) until complete.\n\n`relative_file_path` is the destination path inside `public_html`, e.g. `app.zip`.\n\nInstead of a TUS client, plain `curl` also works:\n```\nFILE=app.zip\nSIZE=$(stat -f%z \"$FILE\") # stat -c%s on Linux\n\ncurl -i -X POST \"{url}/${FILE}?override=true\" \\\n -H \"X-Auth: {auth_key}\" \\\n -H \"X-Auth-Rest: {rest_auth_key}\" \\\n -H \"Tus-Resumable: 1.0.0\" \\\n -H \"Upload-Length: ${SIZE}\" \\\n -H \"Upload-Offset: 0\"\n# -> 201 Created\n\ncurl -i -X PATCH \"{url}/${FILE}?override=true\" \\\n -H \"X-Auth: {auth_key}\" \\\n -H \"X-Auth-Rest: {rest_auth_key}\" \\\n -H \"Tus-Resumable: 1.0.0\" \\\n -H \"Content-Type: application/offset+octet-stream\" \\\n -H \"Upload-Offset: 0\" \\\n --data-binary \"@${FILE}\"\n# -> 204 No Content, Upload-Offset response header equals SIZE when done\n```",
1316
+ "description": "Generate a file browser upload URL with authentication credentials\nfor uploading files directly to a website's file storage.\n\nWhile the website is still being set up (`status: running` on the list website setups\nendpoint) this endpoint returns 409 with a `Retry-After` header: wait that many\nseconds and retry, or poll the website setups until the status is `completed`.\n\nReturns `url`, `auth_key` and `rest_auth_key`. Use these to upload a file to the\nwebsite's `public_html` directory via the TUS resumable upload protocol (TUS 1.0.0).\nSend `X-Auth: {auth_key}` and `X-Auth-Rest: {rest_auth_key}` headers on every request\nbelow.\n\n1. Create the upload: `POST` to `{url}/{relative_file_path}?override=true` with headers\n `upload-length: {file size in bytes}` and `upload-offset: 0`. Expect `201 Created`.\n2. Upload the file: send the file bytes to the same location (any TUS 1.0.0 client, or\n `PATCH` requests with an `upload-offset` header tracking progress) until complete.\n\n`relative_file_path` is the destination path inside `public_html`, e.g. `app.zip`.\n\nInstead of a TUS client, plain `curl` also works:\n```\nFILE=app.zip\nSIZE=$(stat -f%z \"$FILE\") # stat -c%s on Linux\n\ncurl -i -X POST \"{url}/${FILE}?override=true\" \\\n -H \"X-Auth: {auth_key}\" \\\n -H \"X-Auth-Rest: {rest_auth_key}\" \\\n -H \"Tus-Resumable: 1.0.0\" \\\n -H \"Upload-Length: ${SIZE}\" \\\n -H \"Upload-Offset: 0\"\n# -> 201 Created\n\ncurl -i -X PATCH \"{url}/${FILE}?override=true\" \\\n -H \"X-Auth: {auth_key}\" \\\n -H \"X-Auth-Rest: {rest_auth_key}\" \\\n -H \"Tus-Resumable: 1.0.0\" \\\n -H \"Content-Type: application/offset+octet-stream\" \\\n -H \"Upload-Offset: 0\" \\\n --data-binary \"@${FILE}\"\n# -> 204 No Content, Upload-Offset response header equals SIZE when done\n```",
1317
1317
  "method": "POST",
1318
1318
  "path": "/api/hosting/v1/files/upload-urls",
1319
1319
  "inputSchema": {
@@ -2477,6 +2477,34 @@ const tools: OpenApiTool[] = [
2477
2477
  ],
2478
2478
  "group": "hosting"
2479
2479
  },
2480
+ {
2481
+ "name": "hosting_websites_list-setups",
2482
+ "title": "List website setups",
2483
+ "annotations": {
2484
+ "title": "List website setups",
2485
+ "readOnlyHint": true,
2486
+ "destructiveHint": false
2487
+ },
2488
+ "description": "Returns the website setups started in the last 24 hours for the hosting accounts\naccessible to the authenticated client, newest first.\n\nMeant for polling right after creating a website: the website shows up in the\nwebsites list before its server-side setup has finished, and while the setup is\n`running` endpoints that operate on that website may respond with `404` or `409`.\nPoll this endpoint with the `domain` filter every 10 to 15 seconds and wait for\n`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.",
2489
+ "method": "GET",
2490
+ "path": "/api/hosting/v1/onboardings",
2491
+ "inputSchema": {
2492
+ "type": "object",
2493
+ "properties": {
2494
+ "domain": {
2495
+ "type": "string",
2496
+ "description": "Filter by domain name (exact match)"
2497
+ }
2498
+ },
2499
+ "required": []
2500
+ },
2501
+ "security": [
2502
+ {
2503
+ "apiToken": []
2504
+ }
2505
+ ],
2506
+ "group": "hosting"
2507
+ },
2480
2508
  {
2481
2509
  "name": "hosting_orders_list",
2482
2510
  "title": "List orders",
@@ -3056,7 +3084,7 @@ const tools: OpenApiTool[] = [
3056
3084
  "readOnlyHint": true,
3057
3085
  "destructiveHint": false
3058
3086
  },
3059
- "description": "Retrieve a paginated list of websites (CloudLinux, Builder, and Horizons) accessible to the\nauthenticated client.\n\nThis endpoint returns websites from your hosting accounts as well as\nwebsites from other client hosting accounts that have shared access\nwith you.\n\nEach website includes a `website_type` field describing the type of\nwebsite detected on the underlying platform (`wordpress`, `builder`,\n`horizons`, `nodejs`, or `other`). Some fields, such as\n`vhost_type`, `username`, and `root_directory`, only apply to\nCloudLinux websites and are null for other platforms.\n\nUse `website_types` to list only websites of a given detected type, e.g. only\nWordPress websites (`website_types=wordpress`) or only Node.js websites\n(`website_types=nodejs`). Combine with the other available query parameters to\nfilter by username, order ID, enabled status, or domain name for more targeted\nresults.",
3087
+ "description": "Retrieve a paginated list of websites (CloudLinux, Builder, and Horizons) accessible to the\nauthenticated client.\n\nThis endpoint returns websites from your hosting accounts as well as\nwebsites from other client hosting accounts that have shared access\nwith you.\n\nEach website includes a `website_type` field describing the type of\nwebsite detected on the underlying platform (`wordpress`, `builder`,\n`horizons`, `nodejs`, or `other`). Some fields, such as\n`vhost_type`, `username`, and `root_directory`, only apply to\nCloudLinux websites and are null for other platforms.\n\nUse `website_types` to list only websites of a given detected type, e.g. only\nWordPress websites (`website_types=wordpress`) or only Node.js websites\n(`website_types=nodejs`). Combine with the other available query parameters to\nfilter by username, order ID, enabled status, or domain name for more targeted\nresults.\n\nA website appears in this list before its server-side setup has finished, and\n`is_enabled` reflects suspension, not readiness. To know when a newly created website\nis ready for file, deploy or database operations, poll the list website setups\nendpoint instead.",
3060
3088
  "method": "GET",
3061
3089
  "path": "/api/hosting/v1/websites",
3062
3090
  "inputSchema": {
@@ -3119,7 +3147,7 @@ const tools: OpenApiTool[] = [
3119
3147
  "readOnlyHint": false,
3120
3148
  "destructiveHint": false
3121
3149
  },
3122
- "description": "Create a new website for the authenticated client.\n\nYou must choose which hosting order to create this website on. Pass that\norder as `order_id` together with the domain name. List orders to see\navailable IDs; the website is provisioned on that order's hosting plan.\n\nThe datacenter_code parameter is required when creating the first website\non a new hosting plan - this will set up and configure new hosting account\nin the selected datacenter.\n\nSubsequent websites will be hosted on the same datacenter automatically.\n\nWebsite creation takes up to a few minutes to complete. Check the\nwebsites list endpoint to see when your new website becomes available.",
3150
+ "description": "Create a new website for the authenticated client.\n\nYou must choose which hosting order to create this website on. Pass that\norder as `order_id` together with the domain name. List orders to see\navailable IDs; the website is provisioned on that order's hosting plan.\n\nThe datacenter_code parameter is required when creating the first website\non a new hosting plan - this will set up and configure new hosting account\nin the selected datacenter.\n\nSubsequent websites will be hosted on the same datacenter automatically.\n\nWebsite creation is asynchronous and takes up to a few minutes. Poll the list website\nsetups endpoint with the `domain` filter every 10 to 15 seconds and wait for `status:\ncompleted` before uploading files, deploying or creating databases. While the setup is\n`running`, endpoints that operate on the website may respond with `404` or `409`.\n`is_enabled` on the websites list reflects suspension, not readiness.",
3123
3151
  "method": "POST",
3124
3152
  "path": "/api/hosting/v1/websites",
3125
3153
  "inputSchema": {
@@ -4,4 +4,4 @@ import { startServer } from '../core/runtime.js';
4
4
  import tools from '../core/tools/agency-hosting.js';
5
5
  import instructions from '../core/instructions.js';
6
6
 
7
- startServer({ name: 'hostinger-agency-hosting-mcp', version: '2.2.0', tools, instructions });
7
+ startServer({ name: 'hostinger-agency-hosting-mcp', version: '2.4.0', tools, instructions });
@@ -4,4 +4,4 @@ import { startServer } from '../core/runtime.js';
4
4
  import tools from '../core/tools/agency-hosting.js';
5
5
  import instructions from '../core/instructions.js';
6
6
 
7
- startServer({ name: 'hostinger-agency-hosting-mcp', version: '2.2.0', tools, instructions });
7
+ startServer({ name: 'hostinger-agency-hosting-mcp', version: '2.4.0', tools, instructions });
@@ -5,4 +5,4 @@ import tools from '../core/tools/all.js';
5
5
  import instructions from '../core/instructions.js';
6
6
  import skills from '../core/skills.js';
7
7
 
8
- startServer({ name: 'hostinger-api-mcp', version: '2.2.0', tools, instructions, skills });
8
+ startServer({ name: 'hostinger-api-mcp', version: '2.4.0', tools, instructions, skills });
@@ -5,4 +5,4 @@ import tools from '../core/tools/all.js';
5
5
  import instructions from '../core/instructions.js';
6
6
  import skills from '../core/skills.js';
7
7
 
8
- startServer({ name: 'hostinger-api-mcp', version: '2.2.0', tools, instructions, skills });
8
+ startServer({ name: 'hostinger-api-mcp', version: '2.4.0', tools, instructions, skills });
@@ -3,4 +3,4 @@
3
3
  import { startServer } from '../core/runtime.js';
4
4
  import tools from '../core/tools/billing.js';
5
5
 
6
- startServer({ name: 'hostinger-billing-mcp', version: '2.2.0', tools });
6
+ startServer({ name: 'hostinger-billing-mcp', version: '2.4.0', tools });
@@ -3,4 +3,4 @@
3
3
  import { startServer } from '../core/runtime.js';
4
4
  import tools from '../core/tools/billing.js';
5
5
 
6
- startServer({ name: 'hostinger-billing-mcp', version: '2.2.0', tools });
6
+ startServer({ name: 'hostinger-billing-mcp', version: '2.4.0', tools });
@@ -3,4 +3,4 @@
3
3
  import { startServer } from '../core/runtime.js';
4
4
  import tools from '../core/tools/dns.js';
5
5
 
6
- startServer({ name: 'hostinger-dns-mcp', version: '2.2.0', tools });
6
+ startServer({ name: 'hostinger-dns-mcp', version: '2.4.0', tools });
@@ -3,4 +3,4 @@
3
3
  import { startServer } from '../core/runtime.js';
4
4
  import tools from '../core/tools/dns.js';
5
5
 
6
- startServer({ name: 'hostinger-dns-mcp', version: '2.2.0', tools });
6
+ startServer({ name: 'hostinger-dns-mcp', version: '2.4.0', tools });
@@ -3,4 +3,4 @@
3
3
  import { startServer } from '../core/runtime.js';
4
4
  import tools from '../core/tools/domains.js';
5
5
 
6
- startServer({ name: 'hostinger-domains-mcp', version: '2.2.0', tools });
6
+ startServer({ name: 'hostinger-domains-mcp', version: '2.4.0', tools });
@@ -3,4 +3,4 @@
3
3
  import { startServer } from '../core/runtime.js';
4
4
  import tools from '../core/tools/domains.js';
5
5
 
6
- startServer({ name: 'hostinger-domains-mcp', version: '2.2.0', tools });
6
+ startServer({ name: 'hostinger-domains-mcp', version: '2.4.0', tools });
@@ -3,4 +3,4 @@
3
3
  import { startServer } from '../core/runtime.js';
4
4
  import tools from '../core/tools/ecommerce.js';
5
5
 
6
- startServer({ name: 'hostinger-ecommerce-mcp', version: '2.2.0', tools });
6
+ startServer({ name: 'hostinger-ecommerce-mcp', version: '2.4.0', tools });
@@ -3,4 +3,4 @@
3
3
  import { startServer } from '../core/runtime.js';
4
4
  import tools from '../core/tools/ecommerce.js';
5
5
 
6
- startServer({ name: 'hostinger-ecommerce-mcp', version: '2.2.0', tools });
6
+ startServer({ name: 'hostinger-ecommerce-mcp', version: '2.4.0', tools });
@@ -3,4 +3,4 @@
3
3
  import { startServer } from '../core/runtime.js';
4
4
  import tools from '../core/tools/horizons.js';
5
5
 
6
- startServer({ name: 'hostinger-horizons-mcp', version: '2.2.0', tools });
6
+ startServer({ name: 'hostinger-horizons-mcp', version: '2.4.0', tools });
@@ -3,4 +3,4 @@
3
3
  import { startServer } from '../core/runtime.js';
4
4
  import tools from '../core/tools/horizons.js';
5
5
 
6
- startServer({ name: 'hostinger-horizons-mcp', version: '2.2.0', tools });
6
+ startServer({ name: 'hostinger-horizons-mcp', version: '2.4.0', tools });
@@ -4,4 +4,4 @@ import { startServer } from '../core/runtime.js';
4
4
  import tools from '../core/tools/hosting.js';
5
5
  import instructions from '../core/instructions.js';
6
6
 
7
- startServer({ name: 'hostinger-hosting-mcp', version: '2.2.0', tools, instructions });
7
+ startServer({ name: 'hostinger-hosting-mcp', version: '2.4.0', tools, instructions });
@@ -4,4 +4,4 @@ import { startServer } from '../core/runtime.js';
4
4
  import tools from '../core/tools/hosting.js';
5
5
  import instructions from '../core/instructions.js';
6
6
 
7
- startServer({ name: 'hostinger-hosting-mcp', version: '2.2.0', tools, instructions });
7
+ startServer({ name: 'hostinger-hosting-mcp', version: '2.4.0', tools, instructions });
@@ -3,4 +3,4 @@
3
3
  import { startServer } from '../core/runtime.js';
4
4
  import tools from '../core/tools/mail.js';
5
5
 
6
- startServer({ name: 'hostinger-mail-mcp', version: '2.2.0', tools });
6
+ startServer({ name: 'hostinger-mail-mcp', version: '2.4.0', tools });
@@ -3,4 +3,4 @@
3
3
  import { startServer } from '../core/runtime.js';
4
4
  import tools from '../core/tools/mail.js';
5
5
 
6
- startServer({ name: 'hostinger-mail-mcp', version: '2.2.0', tools });
6
+ startServer({ name: 'hostinger-mail-mcp', version: '2.4.0', tools });
@@ -3,4 +3,4 @@
3
3
  import { startServer } from '../core/runtime.js';
4
4
  import tools from '../core/tools/reach.js';
5
5
 
6
- startServer({ name: 'hostinger-reach-mcp', version: '2.2.0', tools });
6
+ startServer({ name: 'hostinger-reach-mcp', version: '2.4.0', tools });
@@ -3,4 +3,4 @@
3
3
  import { startServer } from '../core/runtime.js';
4
4
  import tools from '../core/tools/reach.js';
5
5
 
6
- startServer({ name: 'hostinger-reach-mcp', version: '2.2.0', tools });
6
+ startServer({ name: 'hostinger-reach-mcp', version: '2.4.0', tools });
@@ -3,4 +3,4 @@
3
3
  import { startServer } from '../core/runtime.js';
4
4
  import tools from '../core/tools/vps.js';
5
5
 
6
- startServer({ name: 'hostinger-vps-mcp', version: '2.2.0', tools });
6
+ startServer({ name: 'hostinger-vps-mcp', version: '2.4.0', tools });
@@ -3,4 +3,4 @@
3
3
  import { startServer } from '../core/runtime.js';
4
4
  import tools from '../core/tools/vps.js';
5
5
 
6
- startServer({ name: 'hostinger-vps-mcp', version: '2.2.0', tools });
6
+ startServer({ name: 'hostinger-vps-mcp', version: '2.4.0', tools });
@@ -3,4 +3,4 @@
3
3
  import { startServer } from '../core/runtime.js';
4
4
  import tools from '../core/tools/wordpress.js';
5
5
 
6
- startServer({ name: 'hostinger-wordpress-mcp', version: '2.2.0', tools });
6
+ startServer({ name: 'hostinger-wordpress-mcp', version: '2.4.0', tools });
@@ -3,4 +3,4 @@
3
3
  import { startServer } from '../core/runtime.js';
4
4
  import tools from '../core/tools/wordpress.js';
5
5
 
6
- startServer({ name: 'hostinger-wordpress-mcp', version: '2.2.0', tools });
6
+ startServer({ name: 'hostinger-wordpress-mcp', version: '2.4.0', tools });
package/types.d.ts CHANGED
@@ -2138,6 +2138,44 @@ Use this endpoint to monitor incoming and outgoing registrar transfers across yo
2138
2138
  response: any; // Response structure will depend on the API
2139
2139
  };
2140
2140
 
2141
+ /**
2142
+ * Transfer a domain from another registrar to your account.
2143
+
2144
+ The transfer runs on a domain transfer service you have already purchased.
2145
+
2146
+ Before making request, unlock the domain at the current registrar and get its authorization
2147
+ code.
2148
+
2149
+ A successful response means the transfer has been started. Completion depends on the current
2150
+ registrar and can be followed with the [transfer list endpoint](#tag/domains-transfer).
2151
+
2152
+ If no WHOIS information is provided, default contact information for that TLD will be used.
2153
+ Before making request, ensure WHOIS information for desired TLD exists in your account.
2154
+
2155
+ Use this endpoint to bring domains registered elsewhere into your account.
2156
+ */
2157
+ "domains_transfer_start": {
2158
+ params: {
2159
+ /**
2160
+ * Domain name
2161
+ */
2162
+ domain: string;
2163
+ /**
2164
+ * Authorization code from the current registrar
2165
+ */
2166
+ auth_code: string;
2167
+ /**
2168
+ * Domain contact information
2169
+ */
2170
+ domain_contacts?: object;
2171
+ /**
2172
+ * Keep the existing nameservers of the domain
2173
+ */
2174
+ should_keep_ns?: boolean;
2175
+ };
2176
+ response: any; // Response structure will depend on the API
2177
+ };
2178
+
2141
2179
  /**
2142
2180
  * Change WHOIS contact profile for a domain.
2143
2181
 
@@ -3446,7 +3484,9 @@ The database name must be the full name returned by the list databases endpoint.
3446
3484
  * Allows a remote host to connect to the specified database.
3447
3485
 
3448
3486
  Provide an IPv4/IPv6 address, or "%" to allow any host. The database name must be
3449
- the full name returned by the list databases endpoint.
3487
+ the full name returned by the list databases endpoint. Database creation is synchronous,
3488
+ so a 404 here means no database with that name exists under the username, not that it
3489
+ is still being created.
3450
3490
  */
3451
3491
  "hosting_databases_create-remote-connection": {
3452
3492
  params: {
@@ -3797,6 +3837,10 @@ Skip this verification when using Hostinger's free subdomains (*.hostingersite.c
3797
3837
  * Generate a file browser upload URL with authentication credentials
3798
3838
  for uploading files directly to a website's file storage.
3799
3839
 
3840
+ While the website is still being set up (`status: running` on the list website setups
3841
+ endpoint) this endpoint returns 409 with a `Retry-After` header: wait that many
3842
+ seconds and retry, or poll the website setups until the status is `completed`.
3843
+
3800
3844
  Returns `url`, `auth_key` and `rest_auth_key`. Use these to upload a file to the
3801
3845
  website's `public_html` directory via the TUS resumable upload protocol (TUS 1.0.0).
3802
3846
  Send `X-Auth: {auth_key}` and `X-Auth-Rest: {rest_auth_key}` headers on every request
@@ -4576,6 +4620,28 @@ close or merge it before patching again. Available on Business and Cloud Hosting
4576
4620
  response: any; // Response structure will depend on the API
4577
4621
  };
4578
4622
 
4623
+ /**
4624
+ * Returns the website setups started in the last 24 hours for the hosting accounts
4625
+ accessible to the authenticated client, newest first.
4626
+
4627
+ Meant for polling right after creating a website: the website shows up in the
4628
+ websites list before its server-side setup has finished, and while the setup is
4629
+ `running` endpoints that operate on that website may respond with `404` or `409`.
4630
+ Poll this endpoint with the `domain` filter every 10 to 15 seconds and wait for
4631
+ `status: completed` before uploading files, deploying or creating databases.
4632
+ `failed` means the setup stopped before finishing or has not reported progress for
4633
+ over an hour. Setups older than 24 hours are not listed.
4634
+ */
4635
+ "hosting_websites_list-setups": {
4636
+ params: {
4637
+ /**
4638
+ * Filter by domain name (exact match)
4639
+ */
4640
+ domain?: string;
4641
+ };
4642
+ response: any; // Response structure will depend on the API
4643
+ };
4644
+
4579
4645
  /**
4580
4646
  * Retrieve a paginated list of orders accessible to the authenticated client.
4581
4647
 
@@ -4931,6 +4997,11 @@ WordPress websites (`website_types=wordpress`) or only Node.js websites
4931
4997
  (`website_types=nodejs`). Combine with the other available query parameters to
4932
4998
  filter by username, order ID, enabled status, or domain name for more targeted
4933
4999
  results.
5000
+
5001
+ A website appears in this list before its server-side setup has finished, and
5002
+ `is_enabled` reflects suspension, not readiness. To know when a newly created website
5003
+ is ready for file, deploy or database operations, poll the list website setups
5004
+ endpoint instead.
4934
5005
  */
4935
5006
  "hosting_websites_list": {
4936
5007
  params: {
@@ -4979,8 +5050,11 @@ in the selected datacenter.
4979
5050
 
4980
5051
  Subsequent websites will be hosted on the same datacenter automatically.
4981
5052
 
4982
- Website creation takes up to a few minutes to complete. Check the
4983
- websites list endpoint to see when your new website becomes available.
5053
+ Website creation is asynchronous and takes up to a few minutes. Poll the list website
5054
+ setups endpoint with the `domain` filter every 10 to 15 seconds and wait for `status:
5055
+ completed` before uploading files, deploying or creating databases. While the setup is
5056
+ `running`, endpoints that operate on the website may respond with `404` or `409`.
5057
+ `is_enabled` on the websites list reflects suspension, not readiness.
4984
5058
  */
4985
5059
  "hosting_websites_create": {
4986
5060
  params: {