// Auto-generated tool list for group: hosting import type { Tool } from "@modelcontextprotocol/sdk/types.js"; export interface OpenApiTool extends Tool { method: string; path: string; security: unknown[]; custom?: boolean; hidden?: boolean; replacesHidden?: boolean; group?: string; topic?: string; handlerMethod?: string; templateFile?: string; templateFileTS?: string; } const tools: OpenApiTool[] = [ { "name": "hosting_deploy", "title": "Deploy website, nodejs app, WordPress plugin or theme", "annotations": { "title": "Deploy website, nodejs app, WordPress plugin or theme", "readOnlyHint": false, "destructiveHint": true }, "topic": "hosting", "description": "Deploy, publish or upload a website to Hostinger web hosting (Shared, Cloud): static HTML, PHP, a nodejs (Node.js) app, a whole WordPress site, or a WordPress plugin or theme, from a local directory, an archive or a GitHub or GitLab repository. It detects what the project is and does the upload, build and Git setup itself: do not call upload or build operations, and do not archive the directory yourself. WARNING: it overwrites the website's contents and cannot be undone; confirm the domain with the user before deploying to a site that already has content. A Node.js build runs on the server: this returns a buildUuid at once, then call hosting_get-deployment until the build state is completed or failed. A plugin or theme goes into the site's WordPress installation, also when WordPress is in a folder of the document root (headless). Static, PHP, plugin and theme deploys are done when this returns; a WordPress site import only starts, and its files are extracted a few minutes later. From Git, pass type (static or nodejs) unless the site already runs a Node.js app or you pass Node.js settings; a static or PHP site deploys the branch now and again on every push; a Node.js site builds the branch now and on every later push, with the settings stored for the site (when none are stored, pass appType and nodeVersion from the project's engines, plus outputDirectory and buildScript if the app has a build step). Git needs GitHub or GitLab connected once in hPanel.", "method": "", "path": "", "inputSchema": { "type": "object", "properties": { "domain": { "type": "string", "description": "Domain name of the website to deploy to (e.g., example.com)" }, "path": { "type": "string", "description": "Local directory (preferred; it is archived for you, skipping node_modules, .git and .env files, but not reading .gitignore, so keep build output out) or archive (zip, tar, tar.gz, tgz, 7z, gz, gzip). Not together with git." }, "git": { "type": "object", "description": "Deploy a repository branch instead of local files. Not together with path.", "properties": { "repository": { "type": "string", "description": "owner/name, e.g. hostinger/my-site (GitLab group paths may have more slashes)" }, "branch": { "type": "string", "description": "Branch to deploy, e.g. main" }, "directory": { "type": "string", "description": "Folder under the website's document root to deploy into (static deploys only; default the document root), e.g. my-api" } }, "required": [ "repository", "branch" ] }, "type": { "type": "string", "enum": [ "static", "nodejs", "wordpress-site", "wordpress-plugin", "wordpress-theme" ], "description": "What is deployed. Detected for a directory (a Plugin Name: or Theme Name: header, wp-config.php or wp-content, a package.json with a build or start script); required for an archive, when detection reports ambiguity, and for a Git deploy unless the site already runs a Node.js app or Node.js settings are passed. static also covers PHP." }, "slug": { "type": "string", "description": "WordPress plugin or theme slug: lower-case letters, digits, - and _ (default: the directory name)" }, "activate": { "type": "boolean", "description": "Activate the theme after deployment (WordPress themes only, default: false)" }, "databaseDump": { "type": "string", "description": "Path to a .sql dump; required for a WordPress site import" }, "nodeVersion": { "type": "integer", "enum": [ 18, 20, 22, 24 ], "description": "Node.js major version (default: detected from an archive, or stored for the site, else 22; set it from the project's engines for a Git deploy)" }, "appType": { "type": "string", "description": "Node.js framework, e.g. next, nuxt, vite, express, react, vue, astro; overrides detection or stored settings" }, "rootDirectory": { "type": "string", "description": "Directory with the package.json, relative to the site root (default .)" }, "outputDirectory": { "type": "string", "description": "Build output directory relative to the root directory, e.g. dist" }, "buildScript": { "type": "string", "description": "The package.json script that builds the app, e.g. build" }, "entryFile": { "type": "string", "description": "Entry file of a server app. Relative to the root directory for express, fastify, hono, react-router and other; for a compiled (TypeScript) app give the built file, e.g. dist/server.js, because detection guesses a root-level file. Relative to the output directory for nest, nuxt, nitro, astro and svelte-kit (main.js, not dist/main.js). Ignored for next." }, "packageManager": { "type": "string", "enum": [ "npm", "yarn", "pnpm" ], "description": "Package manager used to install dependencies" } }, "required": [ "domain" ] }, "security": [], "custom": true, "replacesHidden": true, "templateFile": "deploy.template.js", "templateFileTS": "deploy.template.ts", "handlerMethod": "handleHostingDeploy", "group": "hosting" }, { "name": "hosting_get-deployment", "title": "Get deployment status, build status, build logs and failure analysis", "annotations": { "title": "Get deployment status, build status, build logs and failure analysis", "readOnlyHint": true, "destructiveHint": false }, "topic": "hosting", "description": "Check deployment status, build status, build logs and why a build failed (failure analysis) for a website's nodejs (Node.js) deployment: the state of its latest build (or of buildUuid), the end of the build log, the failure analysis when the build failed, and the build settings and Git auto-deployment settings stored for the site. Use it after hosting_deploy starts a Node.js build, and to find out why a deployment failed. Poll until the build state is completed or failed, with growing pauses. The log comes back in full; pass fromLine (the lines count from the previous call) to read only new output. A website without Node.js builds returns build: null with an explanation, because static, PHP, plugin and theme deploys are complete when hosting_deploy returns, and a WordPress site import is ready a few minutes after it starts.", "method": "", "path": "", "inputSchema": { "type": "object", "properties": { "domain": { "type": "string", "description": "Domain name of the website (e.g., example.com)" }, "buildUuid": { "type": "string", "description": "Build to inspect, as returned by hosting_deploy (default: the latest build)" }, "fromLine": { "type": "integer", "description": "Read the build log from this line on (default 0, the whole log). Pass the lines count returned by the previous call to get only new output." } }, "required": [ "domain" ] }, "security": [], "custom": true, "replacesHidden": true, "templateFile": "get-deployment.template.js", "templateFileTS": "get-deployment.template.ts", "handlerMethod": "handleHostingGetDeployment", "group": "hosting" }, { "name": "hosting_import-wordpress-website", "title": "Import WordPress website", "annotations": { "title": "Import WordPress website", "readOnlyHint": false, "destructiveHint": true }, "topic": "hosting", "description": "Import a WordPress website from an archive file to a hosting server. This tool uploads a website archive (zip, tar, tar.gz, etc.) and a database dump (.sql file) to deploy a complete WordPress website. The archive will be extracted on the server automatically. Note: This process may take a while for larger sites. After upload completion, files are being extracted and the site will be available in a few minutes. Upload credentials are generated and used internally — do not call a separate upload-url endpoint or upload the files yourself, this tool does it end-to-end. The username will be automatically resolved from the domain.", "method": "", "path": "", "inputSchema": { "type": "object", "properties": { "domain": { "type": "string", "description": "Domain name associated with the hosting account (e.g., example.com)" }, "archivePath": { "type": "string", "description": "Absolute or relative path to the website archive file. Supported formats: zip, tar, tar.gz, tgz, 7z, gz, gzip. If user provides directory path, create archive from it before proceeding using EXACTLY this naming pattern: directoryname_YYYYMMDD_HHMMSS.zip (e.g., mywebsite_20250115_143022.zip)" }, "databaseDump": { "type": "string", "description": "Absolute or relative path to a database dump file (.sql)" } }, "required": [ "domain", "archivePath", "databaseDump" ] }, "security": [], "custom": true, "templateFile": "import-wordpress.template.js", "templateFileTS": "import-wordpress.template.ts", "handlerMethod": "handleWordpressWebsiteImport", "group": "hosting", "hidden": true }, { "name": "hosting_deploy-wordpress-plugin", "title": "Deploy WordPress plugin", "annotations": { "title": "Deploy WordPress plugin", "readOnlyHint": false, "destructiveHint": true }, "topic": "hosting", "description": "Deploy a WordPress plugin from a directory to a hosting server. This tool uploads all plugin files and triggers plugin deployment. Upload credentials are generated and used internally — do not call a separate upload-url endpoint or upload the files yourself, this tool does it end-to-end.", "method": "", "path": "", "inputSchema": { "type": "object", "properties": { "domain": { "type": "string", "description": "Domain name associated with the hosting account (e.g., example.com)" }, "slug": { "type": "string", "description": "WordPress plugin slug (e.g., omnisend)" }, "pluginPath": { "type": "string", "description": "Absolute or relative path to the plugin directory containing all plugin files" } }, "required": [ "domain", "slug", "pluginPath" ] }, "security": [], "custom": true, "templateFile": "deploy-wordpress-plugin.template.js", "templateFileTS": "deploy-wordpress-plugin.template.ts", "handlerMethod": "handleWordpressPluginDeploy", "group": "hosting", "hidden": true }, { "name": "hosting_deploy-wordpress-theme", "title": "Deploy WordPress theme", "annotations": { "title": "Deploy WordPress theme", "readOnlyHint": false, "destructiveHint": true }, "topic": "hosting", "description": "Deploy a WordPress theme from a directory to a hosting server. This tool uploads all theme files and triggers theme deployment. The uploaded theme can optionally be activated after deployment. Upload credentials are generated and used internally — do not call a separate upload-url endpoint or upload the files yourself, this tool does it end-to-end.", "method": "", "path": "", "inputSchema": { "type": "object", "properties": { "domain": { "type": "string", "description": "Domain name associated with the hosting account (e.g., example.com)" }, "slug": { "type": "string", "description": "WordPress theme slug (e.g., twentytwentyfive)" }, "themePath": { "type": "string", "description": "Absolute or relative path to the theme directory containing all theme files" }, "activate": { "type": "boolean", "description": "Whether to activate the theme after deployment (default: false)" } }, "required": [ "domain", "slug", "themePath" ] }, "security": [], "custom": true, "templateFile": "deploy-wordpress-theme.template.js", "templateFileTS": "deploy-wordpress-theme.template.ts", "handlerMethod": "handleWordpressThemeDeploy", "group": "hosting", "hidden": true }, { "name": "hosting_deploy-js-application", "title": "Deploy JavaScript application", "annotations": { "title": "Deploy JavaScript application", "readOnlyHint": false, "destructiveHint": true }, "topic": "hosting", "description": "Deploy a JavaScript application from an archive file to a hosting server. IMPORTANT: the archive must ONLY contain application source files, not the build output, skip node_modules directory; also exclude all files matched by .gitignore if the ignore file exists. The build process will be triggered automatically on the server after the archive is uploaded. Upload credentials are generated and used internally — do not call a separate upload-url endpoint or upload the archive yourself, this tool does it end-to-end. After deployment, use the hosting_list-js-deployments tool to check deployment status and track build progress.", "method": "", "path": "", "inputSchema": { "type": "object", "properties": { "domain": { "type": "string", "description": "Domain name associated with the hosting account (e.g., example.com)" }, "archivePath": { "type": "string", "description": "Absolute or relative path to the application archive file. Supported formats: zip, tar, tar.gz, tgz, 7z, gz, gzip. If user provides directory path, create archive from it before proceeding. IMPORTANT: the archive must ONLY contain application source files, not the build output, skip node_modules directory." }, "removeArchive": { "type": "boolean", "description": "Whether to remove the archive file after successful deployment (default: false)" } }, "required": [ "domain", "archivePath" ] }, "security": [], "custom": true, "templateFile": "deploy-javascript-app.template.js", "templateFileTS": "deploy-javascript-app.template.ts", "handlerMethod": "handleJavascriptApplicationDeploy", "group": "hosting", "hidden": true }, { "name": "hosting_deploy-static-website", "title": "Deploy static website", "annotations": { "title": "Deploy static website", "readOnlyHint": false, "destructiveHint": true }, "topic": "hosting", "description": "Deploy a static website from an archive file to a hosting server. IMPORTANT: This tool only works for static websites with no build process. The archive must contain pre-built static files (HTML, CSS, JavaScript, images, etc.) ready to be served. If the website has a package.json file or requires a build command, use hosting_deploy-js-application instead. The tool uploads the archive to the website's file browser over TUS and triggers deployment; the archive is extracted and deployed directly without any build steps. Upload credentials are generated and used internally — do not call a separate upload-url endpoint or upload the archive yourself, this tool does it end-to-end. The username will be automatically resolved from the domain.", "method": "", "path": "", "inputSchema": { "type": "object", "properties": { "domain": { "type": "string", "description": "Domain name associated with the hosting account (e.g., example.com)" }, "archivePath": { "type": "string", "description": "Absolute or relative path to the static website archive file. Supported formats: zip, tar, tar.gz, tgz, 7z, gz, gzip. If user provides directory path, create archive from it before proceeding using EXACTLY this naming pattern: directoryname_YYYYMMDD_HHMMSS.zip (e.g., mystaticwebsite_20250115_143022.zip)" }, "removeArchive": { "type": "boolean", "description": "Whether to remove the archive file after successful deployment (default: false)" } }, "required": [ "domain", "archivePath" ] }, "security": [], "custom": true, "templateFile": "deploy-static-website.template.js", "templateFileTS": "deploy-static-website.template.ts", "handlerMethod": "handleStaticWebsiteDeploy", "group": "hosting", "hidden": true }, { "name": "hosting_list-js-deployments", "title": "List JavaScript deployments", "annotations": { "title": "List JavaScript deployments", "readOnlyHint": true, "destructiveHint": false }, "topic": "hosting", "description": "List javascript application deployments for checking their status. Use this tool when customer asks for the status of the deployment. This tool retrieves a paginated list of Node.js application deployments for a domain with optional filtering by deployment states.", "method": "", "path": "", "inputSchema": { "type": "object", "properties": { "domain": { "type": "string", "description": "Domain name associated with the hosting account (e.g., example.com)" }, "page": { "type": "integer", "description": "Page number for pagination (optional)" }, "perPage": { "type": "integer", "description": "Number of items per page (optional)" }, "states": { "type": "array", "items": { "type": "string", "enum": [ "pending", "completed", "running", "failed" ] }, "description": "Filter by deployment states (optional). Valid values: pending, completed, running, failed" } }, "required": [ "domain" ] }, "security": [], "custom": true, "templateFile": "list-javascript-deployments.template.js", "templateFileTS": "list-javascript-deployments.template.ts", "handlerMethod": "handleListJavascriptDeployments", "group": "hosting", "hidden": true }, { "name": "hosting_show-js-deployment-logs", "title": "Show JavaScript deployment logs", "annotations": { "title": "Show JavaScript deployment logs", "readOnlyHint": true, "destructiveHint": false }, "topic": "hosting", "description": "Retrieve logs for a specified JavaScript application deployment for debugging purposes in case of failure.", "method": "", "path": "", "inputSchema": { "type": "object", "properties": { "domain": { "type": "string", "description": "Domain name associated with the hosting account (e.g., example.com)" }, "fromLine": { "type": "integer", "description": "Line from which to retrieve logs (optional, default 0)" }, "buildUuid": { "type": "string", "description": "UUID of the JavaScript deployment build" } }, "required": [ "domain", "buildUuid" ] }, "security": [], "custom": true, "templateFile": "show-javascript-deployment-logs.template.js", "templateFileTS": "show-javascript-deployment-logs.template.ts", "handlerMethod": "handleShowJsDeploymentLogs", "group": "hosting", "hidden": true }, { "name": "hosting_cache_clear-website", "title": "Clear website cache", "annotations": { "title": "Clear website cache", "readOnlyHint": false, "destructiveHint": true, "idempotentHint": true }, "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.", "method": "DELETE", "path": "/api/hosting/v1/accounts/{username}/websites/{domain}/cache/clear", "inputSchema": { "type": "object", "properties": { "username": { "type": "string", "description": "username parameter" }, "domain": { "type": "string", "description": "Domain name" }, "directory": { "type": "string", "description": "Directory of the website installation to clear, relative to the website root.\nDefaults to the website root." } }, "required": [ "username", "domain" ] }, "security": [ { "apiToken": [] } ], "group": "hosting" }, { "name": "hosting_cache_toggle-cacheless", "title": "Toggle cacheless mode", "annotations": { "title": "Toggle cacheless mode", "readOnlyHint": false, "destructiveHint": true, "idempotentHint": true }, "description": "Turns development (cacheless) mode on or off, based on the enabled flag. When enabled, nothing\nis cached, effectively turning off all caching for the website; use it while actively developing,\ntesting changes, debugging issues, or when real-time updates must be visible. Disable it after\nfinishing development work to restore the performance benefits of caching.", "method": "PATCH", "path": "/api/hosting/v1/accounts/{username}/websites/{domain}/cacheless-mode/toggle", "inputSchema": { "type": "object", "properties": { "username": { "type": "string", "description": "username parameter" }, "domain": { "type": "string", "description": "Domain name" }, "enabled": { "type": "boolean", "description": "Turn development (cacheless) mode on (true) or off (false) for the website." } }, "required": [ "username", "domain", "enabled" ] }, "security": [ { "apiToken": [] } ], "group": "hosting" }, { "name": "hosting_cache_toggle-website", "title": "Toggle website cache", "annotations": { "title": "Toggle website cache", "readOnlyHint": false, "destructiveHint": true, "idempotentHint": true }, "description": "Turns server-side caching for the website on or off, based on the enabled flag. Enable it for\nfaster page loads, reduced server load, and improved user experience; recommended for production\nwebsites. Disabling may impact performance; to temporarily bypass caching while developing or\ndebugging, prefer toggling cacheless mode instead.\n\nDoes nothing if caching is already in the requested state.", "method": "PATCH", "path": "/api/hosting/v1/accounts/{username}/websites/{domain}/cache/toggle", "inputSchema": { "type": "object", "properties": { "username": { "type": "string", "description": "username parameter" }, "domain": { "type": "string", "description": "Domain name" }, "enabled": { "type": "boolean", "description": "Turn server-side caching on (true) or off (false) for the website." } }, "required": [ "username", "domain", "enabled" ] }, "security": [ { "apiToken": [] } ], "group": "hosting" }, { "name": "hosting_cdn_disable", "title": "Disable CDN", "annotations": { "title": "Disable CDN", "readOnlyHint": false, "destructiveHint": true }, "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.", "method": "POST", "path": "/api/hosting/v1/accounts/{username}/websites/{domain}/cdn/disable", "inputSchema": { "type": "object", "properties": { "username": { "type": "string", "description": "username parameter" }, "domain": { "type": "string", "description": "Domain name" } }, "required": [ "username", "domain" ] }, "security": [ { "apiToken": [] } ], "group": "hosting" }, { "name": "hosting_cdn_enable", "title": "Enable CDN", "annotations": { "title": "Enable CDN", "readOnlyHint": false, "destructiveHint": false }, "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.", "method": "POST", "path": "/api/hosting/v1/accounts/{username}/websites/{domain}/cdn/enable", "inputSchema": { "type": "object", "properties": { "username": { "type": "string", "description": "username parameter" }, "domain": { "type": "string", "description": "Domain name" } }, "required": [ "username", "domain" ] }, "security": [ { "apiToken": [] } ], "group": "hosting" }, { "name": "hosting_cdn_purge-cache", "title": "Purge CDN cache", "annotations": { "title": "Purge CDN cache", "readOnlyHint": false, "destructiveHint": true, "idempotentHint": true }, "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.", "method": "DELETE", "path": "/api/hosting/v1/accounts/{username}/websites/{domain}/cdn/purge", "inputSchema": { "type": "object", "properties": { "username": { "type": "string", "description": "username parameter" }, "domain": { "type": "string", "description": "Domain name" } }, "required": [ "username", "domain" ] }, "security": [ { "apiToken": [] } ], "group": "hosting" }, { "name": "hosting_cdn_status", "title": "Get CDN status", "annotations": { "title": "Get CDN status", "readOnlyHint": true, "destructiveHint": false }, "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.", "method": "GET", "path": "/api/hosting/v1/accounts/{username}/websites/{domain}/cdn/status", "inputSchema": { "type": "object", "properties": { "username": { "type": "string", "description": "username parameter" }, "domain": { "type": "string", "description": "Domain name" } }, "required": [ "username", "domain" ] }, "security": [ { "apiToken": [] } ], "group": "hosting" }, { "name": "hosting_cron-jobs_list", "title": "List account cron jobs", "annotations": { "title": "List account cron jobs", "readOnlyHint": true, "destructiveHint": false }, "description": "Returns the list of cron jobs configured for the specified account, including their schedule and command.", "method": "GET", "path": "/api/hosting/v1/accounts/{username}/cron-jobs", "inputSchema": { "type": "object", "properties": { "username": { "type": "string", "description": "username parameter" } }, "required": [ "username" ] }, "security": [ { "apiToken": [] } ], "group": "hosting" }, { "name": "hosting_cron-jobs_create", "title": "Create account cron job", "annotations": { "title": "Create account cron job", "readOnlyHint": false, "destructiveHint": false }, "description": "Creates a cron job for the specified account from a schedule expression and a command.\n\nReturns the created cron job, including its uid, which is required to delete the cron job or fetch its output.", "method": "POST", "path": "/api/hosting/v1/accounts/{username}/cron-jobs", "inputSchema": { "type": "object", "properties": { "username": { "type": "string", "description": "username parameter" }, "time": { "type": "string", "description": "Cron schedule expression (for example \"0 2 * * *\" runs daily at 02:00)." }, "command": { "type": "string", "description": "Command to execute on the schedule." } }, "required": [ "username", "time", "command" ] }, "security": [ { "apiToken": [] } ], "group": "hosting" }, { "name": "hosting_cron-jobs_delete", "title": "Delete account cron job", "annotations": { "title": "Delete account cron job", "readOnlyHint": false, "destructiveHint": true, "idempotentHint": true }, "description": "Permanently deletes the cron job identified by its uid.\n\nThe uid is returned by the list cron jobs endpoint.", "method": "DELETE", "path": "/api/hosting/v1/accounts/{username}/cron-jobs/{uid}", "inputSchema": { "type": "object", "properties": { "username": { "type": "string", "description": "username parameter" }, "uid": { "type": "string", "description": "Unique identifier of the cron job as returned by the list cron jobs endpoint." } }, "required": [ "username", "uid" ] }, "security": [ { "apiToken": [] } ], "group": "hosting" }, { "name": "hosting_cron-jobs_output", "title": "Get cron job output", "annotations": { "title": "Get cron job output", "readOnlyHint": true, "destructiveHint": false }, "description": "Returns the output captured from the last execution of the cron job identified by its uid.\n\nThe uid is returned by the list cron jobs endpoint.", "method": "GET", "path": "/api/hosting/v1/accounts/{username}/cron-jobs/{uid}/output", "inputSchema": { "type": "object", "properties": { "username": { "type": "string", "description": "username parameter" }, "uid": { "type": "string", "description": "Unique identifier of the cron job as returned by the list cron jobs endpoint." } }, "required": [ "username", "uid" ] }, "security": [ { "apiToken": [] } ], "group": "hosting" }, { "name": "hosting_databases_change-password", "title": "Change database password", "annotations": { "title": "Change database password", "readOnlyHint": false, "destructiveHint": true, "idempotentHint": true }, "description": "Changes the password for the specified database user.\n\nThe database name must be the full name returned by the list databases endpoint.\nThe password must also be updated in any website configuration that uses this database.", "method": "PATCH", "path": "/api/hosting/v1/accounts/{username}/databases/{name}/change-password", "inputSchema": { "type": "object", "properties": { "username": { "type": "string", "description": "username parameter" }, "name": { "type": "string", "description": "Full database name as returned by the list databases endpoint." }, "password": { "type": "string", "description": "New database user password." } }, "required": [ "username", "name", "password" ] }, "security": [ { "apiToken": [] } ], "group": "hosting" }, { "name": "hosting_databases_list", "title": "List account databases", "annotations": { "title": "List account databases", "readOnlyHint": true, "destructiveHint": false }, "description": "Returns a paginated list of databases for the specified account.\n\nUse the domain and is_assigned filters to find databases assigned to a specific domain.", "method": "GET", "path": "/api/hosting/v1/accounts/{username}/databases", "inputSchema": { "type": "object", "properties": { "username": { "type": "string", "description": "username parameter" }, "page": { "type": "integer", "description": "Page number" }, "per_page": { "type": "integer", "description": "Number of items per page" }, "domain": { "type": "string", "description": "Filter by domain name (case-insensitive substring match)" }, "is_assigned": { "type": "boolean", "description": "When used with domain, return only databases assigned to that domain." }, "search": { "type": "string", "description": "Search databases by name, user, or creation date." } }, "required": [ "username" ] }, "security": [ { "apiToken": [] } ], "group": "hosting" }, { "name": "hosting_databases_create", "title": "Create account database", "annotations": { "title": "Create account database", "readOnlyHint": false, "destructiveHint": false }, "description": "Creates a database with a database user and password for the specified account.\n\nThe database name and user are automatically prefixed with the account username when needed.", "method": "POST", "path": "/api/hosting/v1/accounts/{username}/databases", "inputSchema": { "type": "object", "properties": { "username": { "type": "string", "description": "username parameter" }, "name": { "type": "string", "description": "Database name. If the account username prefix is omitted, it is added automatically." }, "user": { "type": "string", "description": "Database user. If the account username prefix is omitted, it is added automatically." }, "password": { "type": "string", "description": "Database user password." }, "website_domain": { "type": "string", "description": "Website domain assigned to the database." } }, "required": [ "username", "name", "user", "password", "website_domain" ] }, "security": [ { "apiToken": [] } ], "group": "hosting" }, { "name": "hosting_databases_delete", "title": "Delete account database", "annotations": { "title": "Delete account database", "readOnlyHint": false, "destructiveHint": true, "idempotentHint": true }, "description": "Permanently deletes a database and its remote connections.\n\nThe database name must be the full name returned by the list databases endpoint.", "method": "DELETE", "path": "/api/hosting/v1/accounts/{username}/databases/{name}", "inputSchema": { "type": "object", "properties": { "username": { "type": "string", "description": "username parameter" }, "name": { "type": "string", "description": "Full database name as returned by the list databases endpoint." } }, "required": [ "username", "name" ] }, "security": [ { "apiToken": [] } ], "group": "hosting" }, { "name": "hosting_databases_create-remote-connection", "title": "Create database remote connection", "annotations": { "title": "Create database remote connection", "readOnlyHint": false, "destructiveHint": false }, "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.", "method": "POST", "path": "/api/hosting/v1/accounts/{username}/databases/{name}/remote-connections", "inputSchema": { "type": "object", "properties": { "username": { "type": "string", "description": "username parameter" }, "name": { "type": "string", "description": "Full database name as returned by the list databases endpoint." }, "ip": { "type": "string", "description": "Remote host to allow: an IPv4/IPv6 address, or \"%\" for any host." } }, "required": [ "username", "name", "ip" ] }, "security": [ { "apiToken": [] } ], "group": "hosting" }, { "name": "hosting_databases_delete-remote-connection", "title": "Delete database remote connection", "annotations": { "title": "Delete database remote connection", "readOnlyHint": false, "destructiveHint": true, "idempotentHint": true }, "description": "Permanently removes a remote-access rule, revoking the given host's remote access to the database.\n\nIdentify the rule with the required ip query parameter (the IPv4/IPv6 address, or \"%\",\nexactly as returned by the list remote connections endpoint). The database name must be\nthe full name returned by the list databases endpoint.", "method": "DELETE", "path": "/api/hosting/v1/accounts/{username}/databases/{name}/remote-connections", "inputSchema": { "type": "object", "properties": { "username": { "type": "string", "description": "username parameter" }, "name": { "type": "string", "description": "Full database name as returned by the list databases endpoint." }, "ip": { "type": "string", "description": "Remote host to revoke: the IPv4/IPv6 address, or \"%\",\nexactly as returned by the list remote connections endpoint." } }, "required": [ "username", "name", "ip" ] }, "security": [ { "apiToken": [] } ], "group": "hosting" }, { "name": "hosting_databases_list-remote-connections", "title": "List database remote connections", "annotations": { "title": "List database remote connections", "readOnlyHint": true, "destructiveHint": false }, "description": "Returns the remote-access rules for the specified account: the remote hosts\n(IPv4/IPv6 addresses, or \"%\" for any host) allowed to connect to the account databases.\n\nUse the domain filter to only return rules for databases assigned to a specific domain.", "method": "GET", "path": "/api/hosting/v1/accounts/{username}/databases/remote-connections", "inputSchema": { "type": "object", "properties": { "username": { "type": "string", "description": "username parameter" }, "domain": { "type": "string", "description": "Filter remote connections by the domain the database is assigned to.\nRules for databases not assigned to any domain are always included." } }, "required": [ "username" ] }, "security": [ { "apiToken": [] } ], "group": "hosting" }, { "name": "hosting_databases_repair", "title": "Repair database", "annotations": { "title": "Repair database", "readOnlyHint": false, "destructiveHint": true, "idempotentHint": true }, "description": "Repairs corrupted database tables asynchronously.\n\nUse when database errors, crashes, or corruption are reported.\nThe database name must be the full name returned by the list databases endpoint.", "method": "PATCH", "path": "/api/hosting/v1/accounts/{username}/databases/{name}/repair", "inputSchema": { "type": "object", "properties": { "username": { "type": "string", "description": "username parameter" }, "name": { "type": "string", "description": "Full database name as returned by the list databases endpoint." } }, "required": [ "username", "name" ] }, "security": [ { "apiToken": [] } ], "group": "hosting" }, { "name": "hosting_databases_setup-website", "title": "Setup website database", "annotations": { "title": "Setup website database", "readOnlyHint": false, "destructiveHint": false }, "description": "Creates a new MySQL database for the website and writes its connection details into the\nwebsite's environment variables, then restarts the application. The platform generates the\npassword (and the database name and user, unless supplied). The password is never returned;\nthe application reads it from the environment.\n\nWritten variables: `DB_HOST`, `DB_PORT`, `DB_NAME`, `DB_USER`, `DB_PASSWORD` and\n`DATABASE_URL` (`mysql://user:password@host:port/name`, user and password percent-encoded).\nExisting variables are kept. If the website already has any variable with one of these\nnames the call fails with 422 and nothing is created; the `Replace Node.js environment\nvariables` endpoint removes them.\n\nAfter this call the variables are ordinary environment variables: the\n`Replace Node.js environment variables` endpoint changes or removes them like any other.\n\nA restart is enough for apps that read environment variables at process start, such as\nExpress or NestJS. Frameworks that bake variables into the build output (Next.js,\n`NEXT_PUBLIC_*`) see the new values only after a fresh build (`Start Node.js build` endpoint).\n\nA password in the request is ignored; the platform always generates it. The optional `name`\nand `user` are identifiers, not secrets.", "method": "POST", "path": "/api/hosting/v1/accounts/{username}/websites/{domain}/databases/setup", "inputSchema": { "type": "object", "properties": { "username": { "type": "string", "description": "username parameter" }, "domain": { "type": "string", "description": "Domain name" }, "name": { "type": "string", "description": "Optional database name. Generated when omitted. Letters, digits and underscores;\nmust not start with an underscore. Up to 14 characters without the account username\nprefix (`u123456789_`), which is added automatically when missing. With the prefix\nthe full name is 12 to 25 characters." }, "user": { "type": "string", "description": "Optional database user. Generated when omitted. Letters, digits and underscores;\nmust not start with an underscore. Up to 14 characters without the account username\nprefix (`u123456789_`), which is added automatically when missing. With the prefix\nthe full user is 12 to 25 characters." } }, "required": [ "username", "domain" ] }, "security": [ { "apiToken": [] } ], "group": "hosting" }, { "name": "hosting_databases_phpmyadmin-link", "title": "Get phpMyAdmin link", "annotations": { "title": "Get phpMyAdmin link", "readOnlyHint": true, "destructiveHint": false }, "description": "Returns a direct sign-on link to phpMyAdmin for the specified database.\n\nUse this when a visual database interface is needed for SQL queries, imports, exports, or table management.\nThe database name must be the full name returned by the list databases endpoint.", "method": "GET", "path": "/api/hosting/v1/accounts/{username}/databases/{name}/phpmyadmin-link", "inputSchema": { "type": "object", "properties": { "username": { "type": "string", "description": "username parameter" }, "name": { "type": "string", "description": "Full database name as returned by the list databases endpoint." } }, "required": [ "username", "name" ] }, "security": [ { "apiToken": [] } ], "group": "hosting" }, { "name": "hosting_datacenters_list", "title": "List available datacenters", "annotations": { "title": "List available datacenters", "readOnlyHint": true, "destructiveHint": false }, "description": "Retrieve a list of datacenters available for setting up hosting plans\nbased on available datacenter capacity and hosting plan of your order.\nThe first item in the list is the best match for your specific order\nrequirements.", "method": "GET", "path": "/api/hosting/v1/datacenters", "inputSchema": { "type": "object", "properties": { "order_id": { "type": "integer", "description": "Order ID" } }, "required": [ "order_id" ] }, "security": [ { "apiToken": [] } ], "group": "hosting" }, { "name": "hosting_domains_generate-free-subdomain", "title": "Generate a free subdomain", "annotations": { "title": "Generate a free subdomain", "readOnlyHint": false, "destructiveHint": false }, "description": "Generate a unique free subdomain that can be used for hosting services without purchasing custom domains.\nFree subdomains allow you to start using hosting services immediately\nand you can always connect a custom domain to your site later.", "method": "POST", "path": "/api/hosting/v1/domains/free-subdomains", "inputSchema": { "type": "object", "properties": {}, "required": [] }, "security": [ { "apiToken": [] } ], "group": "hosting" }, { "name": "hosting_domains_list-website-parked", "title": "List website parked domains", "annotations": { "title": "List website parked domains", "readOnlyHint": true, "destructiveHint": false }, "description": "Retrieve all parked or alias domains created under the selected website.\n\nUse this endpoint to inspect parked domain configuration for a specific website,\nincluding the parent domain and root directory assigned to each parked domain.", "method": "GET", "path": "/api/hosting/v1/accounts/{username}/websites/{domain}/parked-domains", "inputSchema": { "type": "object", "properties": { "username": { "type": "string", "description": "username parameter" }, "domain": { "type": "string", "description": "Domain name" } }, "required": [ "username", "domain" ] }, "security": [ { "apiToken": [] } ], "group": "hosting" }, { "name": "hosting_domains_create-website-parked", "title": "Create website parked domain", "annotations": { "title": "Create website parked domain", "readOnlyHint": false, "destructiveHint": false }, "description": "Create a parked or alias domain for the selected website.\n\nProvide a domain name or IP address to park on the website so it serves the same content\nas the parent domain.", "method": "POST", "path": "/api/hosting/v1/accounts/{username}/websites/{domain}/parked-domains", "inputSchema": { "type": "object", "properties": { "username": { "type": "string", "description": "username parameter" }, "domain": { "type": "string", "description": "Domain name" }, "parked_domain": { "type": "string", "description": "Domain name or IP address to park on the selected website" } }, "required": [ "username", "domain", "parked_domain" ] }, "security": [ { "apiToken": [] } ], "group": "hosting" }, { "name": "hosting_domains_delete-website-parked", "title": "Delete website parked domain", "annotations": { "title": "Delete website parked domain", "readOnlyHint": false, "destructiveHint": true, "idempotentHint": true }, "description": "Delete an existing parked or alias domain from the selected website.\n\nUse this endpoint to remove parked domains that are no longer needed.", "method": "DELETE", "path": "/api/hosting/v1/accounts/{username}/websites/{domain}/parked-domains/{parkedDomain}", "inputSchema": { "type": "object", "properties": { "username": { "type": "string", "description": "username parameter" }, "domain": { "type": "string", "description": "Domain name" }, "parkedDomain": { "type": "string", "description": "parkedDomain parameter" } }, "required": [ "username", "domain", "parkedDomain" ] }, "security": [ { "apiToken": [] } ], "group": "hosting" }, { "name": "hosting_domains_list-website-subdomains", "title": "List website subdomains", "annotations": { "title": "List website subdomains", "readOnlyHint": true, "destructiveHint": false }, "description": "Retrieve all subdomains created under the selected website.\n\nUse this endpoint to inspect subdomain configuration for a specific website,\nincluding the parent domain and root directory assigned to each subdomain.", "method": "GET", "path": "/api/hosting/v1/accounts/{username}/websites/{domain}/subdomains", "inputSchema": { "type": "object", "properties": { "username": { "type": "string", "description": "username parameter" }, "domain": { "type": "string", "description": "Domain name" } }, "required": [ "username", "domain" ] }, "security": [ { "apiToken": [] } ], "group": "hosting" }, { "name": "hosting_domains_create-website-subdomain", "title": "Create website subdomain", "annotations": { "title": "Create website subdomain", "readOnlyHint": false, "destructiveHint": false }, "description": "Create a new subdomain for the selected website.\n\nProvide a subdomain prefix and, optionally, a custom directory or the\nwebsite public directory to use as the subdomain root.", "method": "POST", "path": "/api/hosting/v1/accounts/{username}/websites/{domain}/subdomains", "inputSchema": { "type": "object", "properties": { "username": { "type": "string", "description": "username parameter" }, "domain": { "type": "string", "description": "Domain name" }, "subdomain": { "type": "string", "description": "Subdomain prefix to create under the selected website" }, "directory": { "type": "string", "description": "Directory name for the subdomain relative to the website root" }, "is_using_public_directory": { "type": "boolean", "description": "Use the website public directory as the subdomain root directory" } }, "required": [ "username", "domain", "subdomain" ] }, "security": [ { "apiToken": [] } ], "group": "hosting" }, { "name": "hosting_domains_delete-website-subdomain", "title": "Delete website subdomain", "annotations": { "title": "Delete website subdomain", "readOnlyHint": false, "destructiveHint": true, "idempotentHint": true }, "description": "Delete an existing subdomain from the selected website.\n\nUse this endpoint to remove subdomains that are no longer needed.", "method": "DELETE", "path": "/api/hosting/v1/accounts/{username}/websites/{domain}/subdomains/{subdomain}", "inputSchema": { "type": "object", "properties": { "username": { "type": "string", "description": "username parameter" }, "domain": { "type": "string", "description": "Domain name" }, "subdomain": { "type": "string", "description": "subdomain parameter" } }, "required": [ "username", "domain", "subdomain" ] }, "security": [ { "apiToken": [] } ], "group": "hosting" }, { "name": "hosting_domains_verify-ownership", "title": "Verify domain ownership", "annotations": { "title": "Verify domain ownership", "readOnlyHint": false, "destructiveHint": false }, "description": "Verify ownership of a single domain and return the verification status.\n\nUse this endpoint to check if a domain is accessible for you before using it for new websites.\nIf the domain is accessible, the response will have `is_accessible: true`.\nIf not, add the given TXT record to your domain's DNS records and try verifying again.\nKeep in mind that it may take up to 10 minutes for new TXT DNS records to propagate.\n\nSkip this verification when using Hostinger's free subdomains (*.hostingersite.com).", "method": "POST", "path": "/api/hosting/v1/domains/verify-ownership", "inputSchema": { "type": "object", "properties": { "domain": { "type": "string", "description": "Domain to verify ownership for" } }, "required": [ "domain" ] }, "security": [ { "apiToken": [] } ], "group": "hosting" }, { "name": "hosting_files_generate-upload-url", "title": "Generate upload URL", "annotations": { "title": "Generate upload URL", "readOnlyHint": false, "destructiveHint": false }, "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```", "method": "POST", "path": "/api/hosting/v1/files/upload-urls", "inputSchema": { "type": "object", "properties": { "username": { "type": "string", "description": "Account username" }, "domain": { "type": "string", "description": "Website domain" } }, "required": [ "username", "domain" ] }, "security": [ { "apiToken": [] } ], "group": "hosting", "hidden": true }, { "name": "hosting_files_list-website-and-directories", "title": "List website files and directories", "annotations": { "title": "List website files and directories", "readOnlyHint": true, "destructiveHint": false }, "description": "List files and directories under a website's document root.\n\nUse `directory` to browse a subdirectory relative to the document root. Symlinked entries\nare listed but never traversed into or resolved.", "method": "GET", "path": "/api/hosting/v1/accounts/{username}/domains/{domain}/files", "inputSchema": { "type": "object", "properties": { "username": { "type": "string", "description": "username parameter" }, "domain": { "type": "string", "description": "Domain name" }, "directory": { "type": "string", "description": "Directory path to check" }, "max_depth": { "type": "integer", "description": "How many directory levels deep to recurse." }, "max_items": { "type": "integer", "description": "Max number of entries to return in this page." }, "offset": { "type": "integer", "description": "Number of entries to skip. Page with offset + item count until reaching total_items." }, "file_types": { "type": "array", "description": "Filter by entry type, e.g. file,directory. Omit for all types.", "items": { "type": "string", "description": "file_types parameter", "enum": [ "file", "directory", "symlink", "other" ] } } }, "required": [ "username", "domain" ] }, "security": [ { "apiToken": [] } ], "group": "hosting" }, { "name": "hosting_files_website-content", "title": "Get website file content", "annotations": { "title": "Get website file content", "readOnlyHint": true, "destructiveHint": false }, "description": "Get a single file's content, relative to a website's document root.\n\nRead-only; refuses symlinks, oversized files, non-text file types, and files identified as\ncontaining secrets (e.g. credential files) — none of these are returned by this endpoint.", "method": "GET", "path": "/api/hosting/v1/accounts/{username}/domains/{domain}/files/content", "inputSchema": { "type": "object", "properties": { "username": { "type": "string", "description": "username parameter" }, "domain": { "type": "string", "description": "Domain name" }, "path": { "type": "string", "description": "File path, relative to the document root." }, "from_line": { "type": "integer", "description": "Line offset to start reading from." }, "max_lines": { "type": "integer", "description": "Max number of lines to return." } }, "required": [ "username", "domain", "path" ] }, "security": [ { "apiToken": [] } ], "group": "hosting" }, { "name": "hosting_git_auto-deployment-settings", "title": "Get Git auto-deployment settings", "annotations": { "title": "Get Git auto-deployment settings", "readOnlyHint": true, "destructiveHint": false }, "description": "Returns the Git auto-deployment settings of the website: which repository and branch deploy\ninto which directory, and whether pushes trigger a deployment. `is_enabled` false keeps the\nrepository link but ignores pushes.\n\nWhen the website has no auto-deployment configured every field is null. Save settings with\n`Update Git auto-deployment settings`.", "method": "GET", "path": "/api/hosting/v1/accounts/{username}/websites/{domain}/git/auto-deployments/settings", "inputSchema": { "type": "object", "properties": { "username": { "type": "string", "description": "username parameter" }, "domain": { "type": "string", "description": "Domain name" } }, "required": [ "username", "domain" ] }, "security": [ { "apiToken": [] } ], "group": "hosting", "hidden": true }, { "name": "hosting_git_update-auto-deployment-settings", "title": "Update Git auto-deployment settings", "annotations": { "title": "Update Git auto-deployment settings", "readOnlyHint": false, "destructiveHint": true, "idempotentHint": true }, "description": "Creates or replaces the Git auto-deployment settings of the website: repository, branch, the\ndirectory under the document root to deploy into, and `is_enabled`. Send the full set;\n`is_enabled` defaults to true and `directory` to the document root. `installation_uuid` must\nbe an installation from `List Git installations` that belongs to the same customer as the\nwebsite.\n\nFor PHP and static websites, saving with `is_enabled` true deploys the branch right away and\nevery later push to that branch deploys again. For Node.js and Website Builder websites saving\ndoes not clone anything. On a Node.js website start the first deploy with\n`Start Node.js build` using `source_type` `git`; pushes then trigger new builds with the build\nsettings stored for the website.", "method": "PUT", "path": "/api/hosting/v1/accounts/{username}/websites/{domain}/git/auto-deployments/settings", "inputSchema": { "type": "object", "properties": { "username": { "type": "string", "description": "username parameter" }, "domain": { "type": "string", "description": "Domain name" }, "installation_uuid": { "type": "string", "description": "Active Git installation from `List Git installations`" }, "owner": { "type": "string", "description": "Repository owner login, as returned by `List Git installation repositories`. GitLab group\npaths use slashes." }, "repository": { "type": "string", "description": "Repository name without the .git suffix" }, "branch": { "type": "string", "description": "Branch to deploy" }, "directory": { "type": "string", "description": "Subdirectory under the website document root to deploy into. Empty, null or omitted means\nthe document root." }, "is_enabled": { "type": "boolean", "description": "Whether pushes to the branch deploy automatically" } }, "required": [ "username", "domain", "installation_uuid", "owner", "repository", "branch" ] }, "security": [ { "apiToken": [] } ], "group": "hosting", "hidden": true }, { "name": "hosting_git_delete-auto-deployment-settings", "title": "Delete Git auto-deployment settings", "annotations": { "title": "Delete Git auto-deployment settings", "readOnlyHint": false, "destructiveHint": true, "idempotentHint": true }, "description": "Removes the Git auto-deployment settings of the website. Files already deployed stay on the\nwebsite; pushes stop deploying until settings are saved again. Succeeds also when nothing is\nconfigured.", "method": "DELETE", "path": "/api/hosting/v1/accounts/{username}/websites/{domain}/git/auto-deployments/settings", "inputSchema": { "type": "object", "properties": { "username": { "type": "string", "description": "username parameter" }, "domain": { "type": "string", "description": "Domain name" } }, "required": [ "username", "domain" ] }, "security": [ { "apiToken": [] } ], "group": "hosting" }, { "name": "hosting_git_list-installations", "title": "List Git installations", "annotations": { "title": "List Git installations", "readOnlyHint": true, "destructiveHint": false }, "description": "Lists the Git provider accounts the customer has connected. Only installations with status\n`active` are returned unless the `status` filter says otherwise.\n\nAn empty list means the customer has no active installation. Check `status=suspended` and\n`status=pending` as well. If there is none at all, a Git provider (GitHub or GitLab) has to be\nconnected once in hPanel (Websites, Manage, Advanced, Git; or Add Website, Node.js Web App,\nImport Git Repository); this endpoint then lists the new installation.\n\nUse `uuid` as the path parameter of `List Git installation repositories`, and as\n`installation_uuid` in `Start Node.js build` with `source_type` `git` and in\n`Update Git auto-deployment settings`.", "method": "GET", "path": "/api/hosting/v1/git/installations", "inputSchema": { "type": "object", "properties": { "provider": { "type": "string", "description": "Filter by Git provider", "enum": [ "github", "gitlab", "bitbucket" ] }, "status": { "type": "string", "description": "Filter by installation status", "enum": [ "pending", "active", "suspended" ] } }, "required": [] }, "security": [ { "apiToken": [] } ], "group": "hosting", "hidden": true }, { "name": "hosting_git_list-installation-repositories", "title": "List Git installation repositories", "annotations": { "title": "List Git installation repositories", "readOnlyHint": true, "destructiveHint": false }, "description": "Lists the repositories the Git installation can access, read live from the provider. Works\nfor github and gitlab installations. Use an active installation: a suspended or pending one\nis still queried and the call fails with whatever the provider answers. The list is cut at\nthe first 500 repositories in the order the provider returns them; when the account has\nmore, name the repository directly instead of searching this list.\n\n`owner`, `name` and a branch (`default_branch` or another one) go into `source_options` of\n`Start Node.js build` or into `Update Git auto-deployment settings`. Returns 404 when the\ninstallation does not belong to the customer. Limited to 10 calls per minute per API client\n(429 above that).", "method": "GET", "path": "/api/hosting/v1/git/installations/{uuid}/repositories", "inputSchema": { "type": "object", "properties": { "uuid": { "type": "string", "description": "Git installation UUID from the List Git installations endpoint" } }, "required": [ "uuid" ] }, "security": [ { "apiToken": [] } ], "group": "hosting", "hidden": true }, { "name": "hosting_git_deploy-website-repository", "title": "Deploy website Git repository", "annotations": { "title": "Deploy website Git repository", "readOnlyHint": false, "destructiveHint": true }, "description": "Clones a Git repository into a directory of the website, or pulls it again. An empty or missing\ndirectory gets a clone of the branch. A directory that already holds this repository and branch is\nreset to its last commit and pulled: changes made on the server to files the repository tracks are\ndiscarded, files it does not track stay. A directory that holds other files, including another\nrepository or another branch of this one, is rejected. `composer install` runs after the clone or\npull when the repository has a `composer.json`.\n\nThe call waits for the deployment and returns its log. `is_success` false means Git or composer\nfailed and the log says why. A second call for the same directory is rejected while the first is\nstill waiting for the server. If the request times out, the deployment may still finish on the\nserver; calling again later with the same repository and branch pulls.\n\nPrivate repositories need an SSH URL and the account's Git SSH key from `Generate Git SSH key`,\nadded to the repository as a deploy key.", "method": "POST", "path": "/api/hosting/v1/accounts/{username}/websites/{domain}/git/repositories/deploy", "inputSchema": { "type": "object", "properties": { "username": { "type": "string", "description": "username parameter" }, "domain": { "type": "string", "description": "Domain name" }, "repository_url": { "type": "string", "description": "Clone URL of the repository on any Git host, SSH or HTTPS. Private repositories need an SSH URL\nand the account's Git SSH key added to the repository as a deploy key. An HTTP or HTTPS URL with\na username or token, or any URL with a password, is rejected." }, "branch": { "type": "string", "description": "Branch to clone and pull" }, "directory": { "type": "string", "description": "Directory under the website document root, exactly as `List website Git repositories` returns\nit for an existing repository. Empty, null or omitted means the document root." } }, "required": [ "username", "domain", "repository_url", "branch" ] }, "security": [ { "apiToken": [] } ], "group": "hosting" }, { "name": "hosting_git_list-website-repositories", "title": "List website Git repositories", "annotations": { "title": "List website Git repositories", "readOnlyHint": true, "destructiveHint": false }, "description": "Lists the Git repositories linked to directories of the website, with\n`Deploy website Git repository` or in the Git section of hPanel: clone URL, branch and directory of\neach one. A repository whose clone failed stays listed; deploying it again retries the clone. GitHub\nand GitLab auto-deployments are not listed here; see `Get Git auto-deployment settings`.", "method": "GET", "path": "/api/hosting/v1/accounts/{username}/websites/{domain}/git/repositories", "inputSchema": { "type": "object", "properties": { "username": { "type": "string", "description": "username parameter" }, "domain": { "type": "string", "description": "Domain name" } }, "required": [ "username", "domain" ] }, "security": [ { "apiToken": [] } ], "group": "hosting" }, { "name": "hosting_git_ssh-public-key", "title": "Get Git SSH public key", "annotations": { "title": "Get Git SSH public key", "readOnlyHint": true, "destructiveHint": false }, "description": "Returns the public SSH key of the hosting account. `Deploy website Git repository` uses this key to\nclone and pull over SSH, so a private repository works once the key is added to it as a deploy key\non the Git host. `public_key` is null when the account has no key yet.", "method": "GET", "path": "/api/hosting/v1/accounts/{username}/git/ssh-key", "inputSchema": { "type": "object", "properties": { "username": { "type": "string", "description": "username parameter" } }, "required": [ "username" ] }, "security": [ { "apiToken": [] } ], "group": "hosting" }, { "name": "hosting_git_generate-ssh-key", "title": "Generate Git SSH key", "annotations": { "title": "Generate Git SSH key", "readOnlyHint": false, "destructiveHint": false }, "description": "Creates the SSH key pair of the hosting account and returns the public key. When the account already\nhas a key, returns that key unchanged. One key serves every website of the account; add the public\nkey to a private repository as a deploy key before deploying it.", "method": "POST", "path": "/api/hosting/v1/accounts/{username}/git/ssh-key", "inputSchema": { "type": "object", "properties": { "username": { "type": "string", "description": "username parameter" } }, "required": [ "username" ] }, "security": [ { "apiToken": [] } ], "group": "hosting" }, { "name": "hosting_headless_submit-build-report", "title": "Submit headless build report", "annotations": { "title": "Submit headless build report", "readOnlyHint": false, "destructiveHint": false }, "description": "Submits the build report the headless skill writes at the end of a run (including early\nstops), so Hostinger can learn where builds get stuck. Send one report per call, with the\nreport JSON as the request body, unchanged. Only send a report when the user agreed to it.\n\nThe report must match report.schema.json v1; an invalid report returns 422 and is not\nstored. The report is linked to the authenticated account, so do not add account details\nto it.", "method": "POST", "path": "/api/hosting/v1/headless/agent-reports", "inputSchema": { "type": "object", "properties": { "schema_version": { "type": "string", "description": "Report schema version", "enum": [ "1" ] }, "generated_at": { "type": "string", "description": "When the report was written" }, "consent": { "type": "object", "description": "Upload status of the report, as written by the headless skill", "properties": { "sent": { "type": "boolean", "description": "sent parameter" }, "note": { "type": "string", "description": "note parameter" } }, "required": [ "sent" ] }, "run": { "type": "object", "description": "The run the report is for", "properties": { "id": { "type": "string", "description": "id parameter" }, "kind": { "type": "string", "description": "kind parameter", "enum": [ "build", "resume", "redesign", "iterate" ] }, "skill": { "type": "string", "description": "skill parameter" }, "follow_ups": { "type": "array", "description": "follow_ups parameter", "items": { "type": "object", "description": "follow_ups parameter", "properties": {} } } }, "required": [ "id", "kind" ] }, "info": { "type": "object", "description": "Website, tool and outcome of the run", "properties": { "domain": { "type": "string", "description": "domain parameter" }, "tool": { "type": "string", "description": "tool parameter" }, "outcome": { "type": "string", "description": "outcome parameter", "enum": [ "live", "stopped", "failed", "abandoned" ] } }, "required": [ "domain", "tool", "outcome" ] }, "timing": { "type": "object", "description": "Run start and end times and per-stage timings", "properties": { "started_at": { "type": "string", "description": "started_at parameter" }, "ended_at": { "type": "string", "description": "ended_at parameter" }, "minutes_total": { "type": "number", "description": "minutes_total parameter" }, "stages": { "type": "array", "description": "stages parameter", "items": { "type": "object", "description": "stages parameter", "properties": {} } } }, "required": [ "started_at", "ended_at", "minutes_total", "stages" ] }, "tokens": { "type": "object", "description": "Token usage, only when the tool reports its own usage", "properties": {} }, "issues": { "type": "array", "description": "Problems hit during the run", "items": { "type": "object", "description": "issues parameter", "properties": {} } }, "user_feedback": { "type": "array", "description": "Feedback the user gave during the run", "items": { "type": "object", "description": "user_feedback parameter", "properties": {} } }, "skill_gaps": { "type": "array", "description": "Places where the skill instructions were missing or wrong", "items": { "type": "object", "description": "skill_gaps parameter", "properties": {} } }, "what_went_well": { "type": "array", "description": "Things that worked well during the run", "items": { "type": "object", "description": "what_went_well parameter", "properties": {} } }, "logging_gaps": { "type": "array", "description": "Where the run log is missing or unsure", "items": { "type": "object", "description": "logging_gaps parameter", "properties": {} } }, "previous_runs": { "type": "array", "description": "Earlier runs for the same website", "items": { "type": "object", "description": "previous_runs parameter", "properties": {} } } }, "required": [ "schema_version", "generated_at", "consent", "run", "info", "timing", "tokens", "issues", "user_feedback", "skill_gaps", "what_went_well", "previous_runs" ] }, "security": [ { "apiToken": [] } ], "group": "hosting" }, { "name": "hosting_nodejs_list-builds", "title": "List NodeJS builds", "annotations": { "title": "List NodeJS builds", "readOnlyHint": true, "destructiveHint": false }, "description": "Retrieve a paginated list of Node.js build processes for a specific website.\n\nEach build represents a single run of the Node.js build pipeline. Use the `states`\nquery parameter to filter results by build state (pending, running, completed, failed).\nUse the `uuid` from a build to poll its output via the `Get Node.js Build Logs` endpoint.", "method": "GET", "path": "/api/hosting/v1/accounts/{username}/websites/{domain}/nodejs/builds", "inputSchema": { "type": "object", "properties": { "username": { "type": "string", "description": "username parameter" }, "domain": { "type": "string", "description": "Domain name" }, "page": { "type": "integer", "description": "Page number" }, "per_page": { "type": "integer", "description": "Number of items per page" }, "states": { "type": "array", "description": "Build states to filter by", "items": { "type": "string", "description": "states parameter", "enum": [ "pending", "running", "completed", "failed" ] } } }, "required": [ "username", "domain" ] }, "security": [ { "apiToken": [] } ], "group": "hosting", "hidden": true }, { "name": "hosting_nodejs_start-build", "title": "Start Node.js build", "annotations": { "title": "Start Node.js build", "readOnlyHint": false, "destructiveHint": false }, "description": "Start a Node.js build process using files already present on the website's file storage.\n\nWARNING: on success this overwrites the website's existing contents and cannot be\nundone — verify this is intended before calling this endpoint.\n\nWith `source_type` `archive`, `source_options.archive_path` must point to an existing\narchive file on the server (relative to the website document root). Use the\n`Generate Upload URL` endpoint to obtain credentials and upload the archive first. To\nauto-detect build settings from an archive before starting, first call the\n`Get Node.js Build Settings from Archive` endpoint.\n\nWith `source_type` `git`, `source_options` carries `owner`, `repository`, `branch` and\n`installation_uuid`. Take the installation from `List Git installations` and the owner and\nrepository from `List Git installation repositories`; the branch is cloned at its current\nhead. The installation must belong to the same customer as the website.\n\nThe returned build `uuid` can be used to poll progress and retrieve logs via\nthe `Get Node.js Build Logs` endpoint.", "method": "POST", "path": "/api/hosting/v1/accounts/{username}/websites/{domain}/nodejs/builds", "inputSchema": { "type": "object", "properties": { "username": { "type": "string", "description": "username parameter" }, "domain": { "type": "string", "description": "Domain name" }, "node_version": { "type": "integer", "description": "Node.js version", "enum": [ 18, 20, 22, 24 ] }, "app_type": { "type": "string", "description": "Node.js application type", "enum": [ "create-react-app", "gatsby", "vite", "angular", "react", "vue", "parcel", "next", "nuxt", "nest", "express", "fastify", "astro", "svelte", "svelte-kit", "hono", "react-router", "nitro", "other" ] }, "root_directory": { "type": "string", "description": "Application root directory (where package.json is located) relative to public_html" }, "output_directory": { "type": "string", "description": "Build output directory relative to the root directory" }, "build_script": { "type": "string", "description": "Build script that will be ran to build the application" }, "entry_file": { "type": "string", "description": "The main entry point file for the application" }, "package_manager": { "type": "string", "description": "Package manager", "enum": [ "npm", "yarn", "pnpm" ] }, "source_type": { "type": "string", "description": "Where the files come from: `archive` (an uploaded archive on the website) or `git`\n(a branch of a repository reachable through a Git installation).", "enum": [ "archive", "git" ] }, "source_options": { "type": "object", "description": "Source-specific options. For `archive` send `archive_path`. For `git` send `owner`,\n`repository`, `branch` and `installation_uuid`, taken from `List Git installations`\nand `List Git installation repositories`.", "properties": { "archive_path": { "type": "string", "description": "The path to the archive file relative to the document root of the vhost (required if source is \"archive\")" }, "owner": { "type": "string", "description": "Repository owner login (required if source is \"git\"). GitLab group paths use\nslashes." }, "repository": { "type": "string", "description": "Repository name without the .git suffix (required if source is \"git\")" }, "branch": { "type": "string", "description": "Branch to build (required if source is \"git\")" }, "installation_uuid": { "type": "string", "description": "Git installation used to access the repository (required if source is \"git\")" } } } }, "required": [ "username", "domain", "node_version", "app_type", "root_directory", "output_directory", "build_script", "source_type", "source_options" ] }, "security": [ { "apiToken": [] } ], "group": "hosting", "hidden": true }, { "name": "hosting_nodejs_build-settings", "title": "Get Node.js build settings", "annotations": { "title": "Get Node.js build settings", "readOnlyHint": true, "destructiveHint": false }, "description": "Returns the build settings stored for the website: framework (`app_type`), Node.js version,\nroot and output directory, build script, entry file and package manager. Stored settings\ndrive Git auto-deployment builds. A build started through the API uses the values sent in\nthat request and saves them here only when no settings exist yet.\n\nReturns 404 until the first build or the first settings update stores them. Use this after\na failed build to check whether the framework or the entry file were detected wrong, then\nfix them with the `Update Node.js build settings` endpoint.", "method": "GET", "path": "/api/hosting/v1/accounts/{username}/websites/{domain}/nodejs/builds/settings", "inputSchema": { "type": "object", "properties": { "username": { "type": "string", "description": "username parameter" }, "domain": { "type": "string", "description": "Domain name" } }, "required": [ "username", "domain" ] }, "security": [ { "apiToken": [] } ], "group": "hosting", "hidden": true }, { "name": "hosting_nodejs_update-build-settings", "title": "Update Node.js build settings", "annotations": { "title": "Update Node.js build settings", "readOnlyHint": false, "destructiveHint": true, "idempotentHint": true }, "description": "Replaces the build settings stored for the website. Send the full set: `node_version` is\nrequired and every nullable field you omit is stored as null. Creates the settings when\nnone exist yet.\n\nThis does not start a build. Stored settings drive Git auto-deployment builds; a build\nstarted through the API uses the values sent in that request, so to rebuild with corrected\nsettings call `Start Node.js build` with the same values. Typical fixes: a wrong `app_type`\nafter auto-detection, or a missing `entry_file` for express, fastify, nest, nuxt and hono\napps.", "method": "PUT", "path": "/api/hosting/v1/accounts/{username}/websites/{domain}/nodejs/builds/settings", "inputSchema": { "type": "object", "properties": { "username": { "type": "string", "description": "username parameter" }, "domain": { "type": "string", "description": "Domain name" }, "node_version": { "type": "integer", "description": "Node.js major version", "enum": [ 18, 20, 22, 24 ] }, "app_type": { "type": "string", "description": "Node.js application framework. Set it explicitly when auto-detection picked the wrong one.", "enum": [ "create-react-app", "gatsby", "vite", "angular", "react", "vue", "parcel", "next", "nuxt", "nest", "express", "fastify", "astro", "svelte", "svelte-kit", "hono", "react-router", "nitro", "other" ] }, "root_directory": { "type": "string", "description": "Application root directory (where package.json is located) relative to public_html.\nOmit it, or send \".\", for public_html itself." }, "output_directory": { "type": "string", "description": "Build output directory relative to the root directory" }, "build_script": { "type": "string", "description": "The package.json script that builds the application" }, "entry_file": { "type": "string", "description": "The main entry point file for the application\n(required for express, fastify, nest, nuxt and hono app types)" }, "package_manager": { "type": "string", "description": "Package manager used to install dependencies", "enum": [ "npm", "yarn", "pnpm" ] } }, "required": [ "username", "domain", "node_version" ] }, "security": [ { "apiToken": [] } ], "group": "hosting", "hidden": true }, { "name": "hosting_nodejs_build-settings-from-archive", "title": "Get Node.js build settings from archive", "annotations": { "title": "Get Node.js build settings from archive", "readOnlyHint": true, "destructiveHint": false }, "description": "Auto-detect Node.js build settings from a package.json inside an archive already on the server.\n\nUse this before calling `Start Node.js Build` to preview what settings will be used,\nor to let the user review and override values (framework, node version, root directory,\noutput directory, build script) before committing to a build.\n\nThe archive must already be present on the website's file storage. Use the\n`Generate Upload URL` endpoint to obtain credentials and upload the archive first.", "method": "GET", "path": "/api/hosting/v1/accounts/{username}/websites/{domain}/nodejs/builds/settings/from-archive", "inputSchema": { "type": "object", "properties": { "username": { "type": "string", "description": "username parameter" }, "domain": { "type": "string", "description": "Domain name" }, "archive_path": { "type": "string", "description": "The path to the archive file relative to the document root of the vhost" } }, "required": [ "username", "domain", "archive_path" ] }, "security": [ { "apiToken": [] } ], "group": "hosting", "hidden": true }, { "name": "hosting_nodejs_build-settings-from-repository", "title": "Get Node.js build settings from repository", "annotations": { "title": "Get Node.js build settings from repository", "readOnlyHint": true, "destructiveHint": false }, "description": "Determine the build settings for a Node.js application from the package.json file of a branch\nin a Git repository. Use before starting a Git-source build to find out the auto-detected\nsettings instead of guessing them.\n\nThe repository is read through a Git installation: take `installation_uuid` from\n`List Git installations` and `owner` and `repository` from `List Git installation repositories`.\n\nReturns 422 when the installation is not found, the repository or branch is not found, or\nthe branch has no package.json.", "method": "GET", "path": "/api/hosting/v1/accounts/{username}/websites/{domain}/nodejs/builds/settings/from-repository", "inputSchema": { "type": "object", "properties": { "username": { "type": "string", "description": "username parameter" }, "domain": { "type": "string", "description": "Domain name" }, "owner": { "type": "string", "description": "Repository owner login. GitLab group paths use slashes." }, "repository": { "type": "string", "description": "Repository name without the .git suffix" }, "branch": { "type": "string", "description": "Branch whose package.json is inspected" }, "installation_uuid": { "type": "string", "description": "Git installation used to access the repository, taken from `List Git installations`" } }, "required": [ "username", "domain", "owner", "repository", "branch", "installation_uuid" ] }, "security": [ { "apiToken": [] } ], "group": "hosting" }, { "name": "hosting_nodejs_list-environment-variables", "title": "List Node.js environment variables", "annotations": { "title": "List Node.js environment variables", "readOnlyHint": true, "destructiveHint": false }, "description": "Lists the Node.js environment variables currently set for the website. Values are always\nmasked as `********` and cannot be read back through this API. Use this endpoint to see\nwhich keys are configured or to verify a change, not to read values.\n\nTo change variables, use the `Replace Node.js environment variables` endpoint. It replaces\nthe whole set, so never copy the masked values from this response into that request; send\nthe full desired set with real values taken from the project `.env` file or the user\nprompt instead.", "method": "GET", "path": "/api/hosting/v1/accounts/{username}/websites/{domain}/nodejs/builds/settings/env", "inputSchema": { "type": "object", "properties": { "username": { "type": "string", "description": "username parameter" }, "domain": { "type": "string", "description": "Domain name" } }, "required": [ "username", "domain" ] }, "security": [ { "apiToken": [] } ], "group": "hosting" }, { "name": "hosting_nodejs_replace-environment-variables", "title": "Replace Node.js environment variables", "annotations": { "title": "Replace Node.js environment variables", "readOnlyHint": false, "destructiveHint": true, "idempotentHint": true }, "description": "Replaces the website's Node.js environment variables with the ones provided. This is a\nfull replace: any variable not in the request is deleted, and sending an empty `env_vars`\narray deletes every variable. Saving writes the values and restarts the running Node.js\nprocess.\n\nA restart is enough for apps that read environment variables at process start, such as\nExpress or NestJS. It is not enough for frameworks that bake variables into the build.\nNext.js standalone is one of those: build-time values (including `NEXT_PUBLIC_*`) need a\nfresh build. After this call, use the `Start Node.js build` endpoint so those apps\npick up the new values.\n\nThe `List Node.js environment variables` endpoint returns masked values (`********`), so\nnever copy values from it into this request. Always send the full desired set with real\nvalues taken from the project `.env` file or the user prompt.", "method": "PUT", "path": "/api/hosting/v1/accounts/{username}/websites/{domain}/nodejs/builds/settings/env", "inputSchema": { "type": "object", "properties": { "username": { "type": "string", "description": "username parameter" }, "domain": { "type": "string", "description": "Domain name" }, "env_vars": { "type": "array", "description": "Environment variables to set. This is the full desired set: any variable not in\nthis list is deleted, and an empty array deletes every variable.", "items": { "type": "object", "description": "env_vars parameter", "properties": { "key": { "type": "string", "description": "Environment variable name. Must start with an uppercase letter or\nunderscore, followed by uppercase letters, digits or underscores." }, "value": { "type": "string", "description": "Environment variable value." } }, "required": [ "key", "value" ] } } }, "required": [ "username", "domain", "env_vars" ] }, "security": [ { "apiToken": [] } ], "group": "hosting" }, { "name": "hosting_nodejs_analyse-failed-build", "title": "Analyse failed Node.js build", "annotations": { "title": "Analyse failed Node.js build", "readOnlyHint": true, "destructiveHint": false }, "description": "Returns an AI analysis of why a build failed and how to fix it, based on the build logs,\nthe project file list and package.json. Only builds in the `failed` state can be analysed;\nany other state returns 422. When no analysis could be produced both `analysis` and\n`solution` are null, in which case read `Get NodeJS build logs` instead.\n\nEach call runs the analysis again, so call it once per failed build and keep the result.\nLimited to 5 calls per minute per API client (429 above that).", "method": "GET", "path": "/api/hosting/v1/accounts/{username}/websites/{domain}/nodejs/builds/{uuid}/analysis", "inputSchema": { "type": "object", "properties": { "username": { "type": "string", "description": "username parameter" }, "domain": { "type": "string", "description": "Domain name" }, "uuid": { "type": "string", "description": "Build UUID" } }, "required": [ "username", "domain", "uuid" ] }, "security": [ { "apiToken": [] } ], "group": "hosting", "hidden": true }, { "name": "hosting_nodejs_build", "title": "Get Node.js build details", "annotations": { "title": "Get Node.js build details", "readOnlyHint": true, "destructiveHint": false }, "description": "Returns one build by UUID: its state (`pending`, `running`, `completed`, `failed`), the\noptions it ran with and timestamps. Poll this while a build is pending or running. When it\nis failed, read `Get NodeJS build logs` and `Analyse failed Node.js build` for the cause.\nReturns 404 when the UUID does not belong to a build of this website.", "method": "GET", "path": "/api/hosting/v1/accounts/{username}/websites/{domain}/nodejs/builds/{uuid}", "inputSchema": { "type": "object", "properties": { "username": { "type": "string", "description": "username parameter" }, "domain": { "type": "string", "description": "Domain name" }, "uuid": { "type": "string", "description": "Build UUID" } }, "required": [ "username", "domain", "uuid" ] }, "security": [ { "apiToken": [] } ], "group": "hosting", "hidden": true }, { "name": "hosting_nodejs_build-logs", "title": "Get NodeJS build logs", "annotations": { "title": "Get NodeJS build logs", "readOnlyHint": true, "destructiveHint": false }, "description": "Retrieve logs from a specific Node.js build process.\n\nTo stream live output while a build is running, poll this endpoint repeatedly\nwhile the build state is `running`, passing the previously returned `lines` count\nas `from_line` to fetch only new output since the last call.\nLog content may contain ANSI escape sequences (color codes).", "method": "GET", "path": "/api/hosting/v1/accounts/{username}/websites/{domain}/nodejs/builds/{uuid}/logs", "inputSchema": { "type": "object", "properties": { "username": { "type": "string", "description": "username parameter" }, "domain": { "type": "string", "description": "Domain name" }, "uuid": { "type": "string", "description": "Build UUID" }, "from_line": { "type": "integer", "description": "Line from which to start retrieving logs" } }, "required": [ "username", "domain", "uuid" ] }, "security": [ { "apiToken": [] } ], "group": "hosting", "hidden": true }, { "name": "hosting_nodejs_runtime-logs", "title": "Get Node.js runtime logs", "annotations": { "title": "Get Node.js runtime logs", "readOnlyHint": true, "destructiveHint": false }, "description": "Returns the Node.js application's runtime console log entries, oldest first, each with\ntimestamp, level and message. On the first call send `period` (`1h`, `1d`, `1w` or `1m`)\nand optionally `levels` and `limit` (1-5000, default 1000); when more entries match than\n`limit`, the newest are kept.\n\nTo poll for new entries send `total_lines + 1` from the previous response as `from_line`\nand omit `period`; `period` and `from_line` cannot be combined. Lines that are not JSON\nwith a timestamp, level and message are skipped, so `logs` may hold fewer than `limit`\nentries while `total_lines` counts every raw line. Entries with a timestamp before\n`last_deployed_at` belong to the previous deployment. Returns an empty `logs` list when\nthe application has not written a log file yet.", "method": "GET", "path": "/api/hosting/v1/accounts/{username}/websites/{domain}/nodejs/runtime-logs", "inputSchema": { "type": "object", "properties": { "username": { "type": "string", "description": "username parameter" }, "domain": { "type": "string", "description": "Domain name" }, "period": { "type": "string", "description": "Time window for the first fetch. Required when `from_line` is not sent.", "enum": [ "1h", "1d", "1w", "1m" ] }, "from_line": { "type": "integer", "description": "1-based line of the log file to start from. For polling send `total_lines + 1` from the\nprevious response. Cannot be combined with `period`." }, "limit": { "type": "integer", "description": "Maximum number of log entries to return. When more entries match, the newest are kept." }, "levels": { "type": "array", "description": "Return only entries with these log levels, sent as a comma-separated list, e.g. ERROR,WARN.\nMatching runs on the raw log line, so entries written with numeric levels (for example by\npino) are excluded while this filter is set.", "items": { "type": "string", "description": "levels parameter", "enum": [ "LOG", "ERROR", "WARN", "INFO", "DEBUG", "TRACE" ] } } }, "required": [ "username", "domain" ] }, "security": [ { "apiToken": [] } ], "group": "hosting" }, { "name": "hosting_nodejs_clear-runtime-logs", "title": "Clear Node.js runtime logs", "annotations": { "title": "Clear Node.js runtime logs", "readOnlyHint": false, "destructiveHint": true, "idempotentHint": true }, "description": "Empties the Node.js application's runtime log file. This cannot be undone, so confirm with\nthe user before calling it. Returns success even when no log file exists yet.\n\nUse it before reproducing a problem so the next `Get Node.js runtime logs` call returns\nonly fresh entries; start that call with `period` again instead of reusing a `from_line`\nfrom before the clear.", "method": "DELETE", "path": "/api/hosting/v1/accounts/{username}/websites/{domain}/nodejs/runtime-logs", "inputSchema": { "type": "object", "properties": { "username": { "type": "string", "description": "username parameter" }, "domain": { "type": "string", "description": "Domain name" } }, "required": [ "username", "domain" ] }, "security": [ { "apiToken": [] } ], "group": "hosting" }, { "name": "hosting_nodejs_restart-application", "title": "Restart Node.js application", "annotations": { "title": "Restart Node.js application", "readOnlyHint": false, "destructiveHint": false }, "description": "Restarts the Node.js server process for the website. Does not rebuild or redeploy the\napplication. Use it to apply environment or configuration changes, or to recover a hung\napplication.\n\nOnly applicable to server-side applications (Express, Next.js, NestJS, etc.). Static\nfront-end apps (React, Vue, Vite) have no persistent server process, so restarting them\nhas no effect. Returns success even when the website has no server process to restart.", "method": "POST", "path": "/api/hosting/v1/accounts/{username}/websites/{domain}/nodejs/server/restart", "inputSchema": { "type": "object", "properties": { "username": { "type": "string", "description": "username parameter" }, "domain": { "type": "string", "description": "Domain name" } }, "required": [ "username", "domain" ] }, "security": [ { "apiToken": [] } ], "group": "hosting" }, { "name": "hosting_nodejs_list-vulnerabilities", "title": "List Node.js vulnerabilities", "annotations": { "title": "List Node.js vulnerabilities", "readOnlyHint": true, "destructiveHint": false }, "description": "Lists known npm package vulnerabilities detected on a Node.js website, enriched with\nadvisory metadata (severity, CVSS score, CVE, advisory URL). Results are sorted from\nthe most severe to the least severe, then by publish date (newest first). Use the\n`severities` query parameter to filter.\n\nVulnerabilities with `is_patchable` set to `true` can be auto-fixed via the\n`Patch Node.js Vulnerabilities` endpoint, which opens a GitHub pull request with\nupdated package versions. Auto-fix is only available for websites deployed from a\nconnected GitHub repository. Vulnerabilities with `is_patching_in_progress` set to\n`true` are already included in an open patch pull request; while any patch pull\nrequest is open, new patch requests for this website are rejected until it is merged\nor closed.\n\nData comes from periodic dependency scans, so it may lag behind the latest deployment.\nAn empty list means the most recent scan found no vulnerabilities; it does not\nguarantee the current deployment is vulnerability-free. Available on Business and\nCloud Hosting plans.", "method": "GET", "path": "/api/hosting/v1/accounts/{username}/websites/{domain}/nodejs/vulnerabilities", "inputSchema": { "type": "object", "properties": { "username": { "type": "string", "description": "username parameter" }, "domain": { "type": "string", "description": "Domain name" }, "severities": { "type": "array", "description": "Severities to filter by", "items": { "type": "string", "description": "severities parameter", "enum": [ "low", "moderate", "high", "critical", "unknown" ] } } }, "required": [ "username", "domain" ] }, "security": [ { "apiToken": [] } ], "group": "hosting" }, { "name": "hosting_nodejs_patch-vulnerabilities", "title": "Patch Node.js vulnerabilities", "annotations": { "title": "Patch Node.js vulnerabilities", "readOnlyHint": false, "destructiveHint": false }, "description": "Patches the selected Node.js vulnerabilities by updating the affected package versions\nin `package.json` and opening a GitHub pull request in the connected repository. The\ncustomer reviews and merges the pull request; merging triggers the automatic deployment.\n\nAuto-fix is only available for websites deployed from a connected GitHub repository.\nWebsites deployed from an archive have no auto-fix path and return a 404. The Hostinger\nGitHub App needs write access to the repository; without it the request fails with a\n403 explaining the missing permission.\n\nOnly vulnerabilities with `is_patchable` set to `true` can be patched. Non-patchable\nIDs in the selection are skipped; the pull request covers the patchable subset, listed\nin `patched_vulnerability_ids`. Selections without any patchable vulnerability are\nrejected with a 422. Only one patch pull request can be open at a time per website;\nclose or merge it before patching again. Available on Business and Cloud Hosting plans.", "method": "POST", "path": "/api/hosting/v1/accounts/{username}/websites/{domain}/nodejs/vulnerabilities/patch", "inputSchema": { "type": "object", "properties": { "username": { "type": "string", "description": "username parameter" }, "domain": { "type": "string", "description": "Domain name" }, "vulnerability_ids": { "type": "array", "description": "List of vulnerability IDs to patch, as returned by the list vulnerabilities endpoint.", "items": { "type": "string", "description": "vulnerability_ids parameter" } } }, "required": [ "username", "domain", "vulnerability_ids" ] }, "security": [ { "apiToken": [] } ], "group": "hosting" }, { "name": "hosting_websites_list-setups", "title": "List website setups", "annotations": { "title": "List website setups", "readOnlyHint": true, "destructiveHint": false }, "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.", "method": "GET", "path": "/api/hosting/v1/onboardings", "inputSchema": { "type": "object", "properties": { "order_id": { "type": "integer", "description": "Order ID" }, "subscription_id": { "type": "string", "description": "Filter by hosting order subscription ID" }, "domain": { "type": "string", "description": "Filter by domain name (exact match)" } }, "required": [] }, "security": [ { "apiToken": [] } ], "group": "hosting" }, { "name": "hosting_websites_start-setup", "title": "Start website setup", "annotations": { "title": "Start website setup", "readOnlyHint": false, "destructiveHint": false }, "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.", "method": "POST", "path": "/api/hosting/v1/orders/{order_id}/onboardings", "inputSchema": { "type": "object", "properties": { "order_id": { "type": "integer", "description": "Hosting order ID. List orders to find available IDs." }, "type": { "type": "string", "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`.", "enum": [ "wordpress", "headless_empty", "headless_wordpress", "headless_ecommerce", "headless_pocketbase" ] }, "domain": { "type": "string", "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." }, "datacenter_code": { "type": "string", "description": "Datacenter for the hosting account when the order does not have one yet. Omit to use the order's default datacenter. Ignored when the order already has a hosting account. List available datacenters to find valid codes." }, "wordpress": { "type": "object", "description": "WordPress install settings. Required when `type` is `wordpress`, not allowed otherwise. The site title is the domain.", "properties": { "language": { "type": "string", "description": "WordPress locale, for example `en_US` or `lt_LT`. Defaults to `en_US` when omitted." }, "is_ai_builder": { "type": "boolean", "description": "When `true`, installs the Hostinger AI theme (`hostinger-ai-theme`). Defaults to `false` when omitted." }, "admin": { "type": "object", "description": "WordPress administrator account", "properties": { "user": { "type": "string", "description": "WordPress admin username (letters, numbers, and underscore)" }, "password": { "type": "string", "description": "WordPress admin password (8-50 characters, mixed case, a digit, and not compromised)" }, "email": { "type": "string", "description": "WordPress admin email address" } }, "required": [ "user", "password", "email" ] } }, "required": [ "admin" ] } }, "required": [ "order_id" ] }, "security": [ { "apiToken": [] } ], "group": "hosting" }, { "name": "hosting_orders_list", "title": "List orders", "annotations": { "title": "List orders", "readOnlyHint": true, "destructiveHint": false }, "description": "Retrieve a paginated list of orders accessible to the authenticated client.\n\nOnly Web and Cloud hosting orders are listed. Agency Plan orders are listed by\n`GET /api/agency-hosting/v1/orders`.\n\nThis endpoint returns orders of your hosting accounts as well as orders\nof other client hosting accounts that have shared access with you.\n\nUse the available query parameters to filter results by order statuses\nor specific order IDs for more targeted results.", "method": "GET", "path": "/api/hosting/v1/orders", "inputSchema": { "type": "object", "properties": { "page": { "type": "integer", "description": "Page number" }, "per_page": { "type": "integer", "description": "Number of items per page" }, "statuses": { "type": "array", "description": "Filter by order statuses", "items": { "type": "string", "description": "statuses parameter", "enum": [ "active", "deleting", "deleted", "suspended" ] } }, "order_ids": { "type": "array", "description": "Filter by specific order IDs", "items": { "type": "integer", "description": "order_ids parameter" } } }, "required": [] }, "security": [ { "apiToken": [] } ], "group": "hosting" }, { "name": "hosting_php_reset-extensions", "title": "Reset PHP extensions", "annotations": { "title": "Reset PHP extensions", "readOnlyHint": false, "destructiveHint": true, "idempotentHint": true }, "description": "Resets all PHP extensions of the website to their default state.\n\nUse it to recover from extension conflicts or restore the original configuration.", "method": "PATCH", "path": "/api/hosting/v1/accounts/{username}/websites/{domain}/php/extensions/reset", "inputSchema": { "type": "object", "properties": { "username": { "type": "string", "description": "username parameter" }, "domain": { "type": "string", "description": "Domain name" } }, "required": [ "username", "domain" ] }, "security": [ { "apiToken": [] } ], "group": "hosting" }, { "name": "hosting_php_get", "title": "Get PHP details", "annotations": { "title": "Get PHP details", "readOnlyHint": true, "destructiveHint": false }, "description": "Returns the full PHP configuration for the website: current version, available versions\n(supported and unsupported), enabled/disabled extensions, options with their current value,\ndefault, type and the plan limit (`max`), and conflicting extension groups.\n\nUse it to check the current PHP setup before updating the version, extensions or options.", "method": "GET", "path": "/api/hosting/v1/accounts/{username}/websites/{domain}/php/details", "inputSchema": { "type": "object", "properties": { "username": { "type": "string", "description": "username parameter" }, "domain": { "type": "string", "description": "Domain name" } }, "required": [ "username", "domain" ] }, "security": [ { "apiToken": [] } ], "group": "hosting" }, { "name": "hosting_php_info", "title": "Get PHP info", "annotations": { "title": "Get PHP info", "readOnlyHint": true, "destructiveHint": false }, "description": "Returns the full phpinfo page (HTML) for the website.\n\nUse it to debug PHP issues or inspect the complete PHP environment of the website.", "method": "GET", "path": "/api/hosting/v1/accounts/{username}/websites/{domain}/php/php-info", "inputSchema": { "type": "object", "properties": { "username": { "type": "string", "description": "username parameter" }, "domain": { "type": "string", "description": "Domain name" } }, "required": [ "username", "domain" ] }, "security": [ { "apiToken": [] } ], "group": "hosting" }, { "name": "hosting_php_update-extensions", "title": "Update PHP extensions", "annotations": { "title": "Update PHP extensions", "readOnlyHint": false, "destructiveHint": true, "idempotentHint": true }, "description": "Enables or disables PHP extensions (modules) for the website.\n\nUse the Get PHP details endpoint to check the current extension states before changing them.", "method": "PATCH", "path": "/api/hosting/v1/accounts/{username}/websites/{domain}/php/extensions", "inputSchema": { "type": "object", "properties": { "username": { "type": "string", "description": "username parameter" }, "domain": { "type": "string", "description": "Domain name" }, "enable": { "type": "array", "description": "PHP extensions to enable.", "items": { "type": "string", "description": "enable parameter" } }, "disable": { "type": "array", "description": "PHP extensions to disable.", "items": { "type": "string", "description": "disable parameter" } } }, "required": [ "username", "domain" ] }, "security": [ { "apiToken": [] } ], "group": "hosting" }, { "name": "hosting_php_update-options", "title": "Update PHP options", "annotations": { "title": "Update PHP options", "readOnlyHint": false, "destructiveHint": true, "idempotentHint": true }, "description": "Updates PHP options for the website (e.g. `memory_limit`, `max_execution_time`, `upload_max_filesize`).\nOnly provide the options you want to change, inside the `options` object.\n\nValues above the account plan limit are silently capped to that limit, so the request can succeed\nwith a smaller applied value. Call the Get PHP details endpoint afterwards to read the applied value.", "method": "PATCH", "path": "/api/hosting/v1/accounts/{username}/websites/{domain}/php/options", "inputSchema": { "type": "object", "properties": { "username": { "type": "string", "description": "username parameter" }, "domain": { "type": "string", "description": "Domain name" }, "options": { "type": "object", "description": "Map of PHP options to update, keyed by option name. Only include options you want to change.", "properties": {} } }, "required": [ "username", "domain", "options" ] }, "security": [ { "apiToken": [] } ], "group": "hosting" }, { "name": "hosting_php_update-version", "title": "Update PHP version", "annotations": { "title": "Update PHP version", "readOnlyHint": false, "destructiveHint": true, "idempotentHint": true }, "description": "Changes the PHP version of the website.\n\nUse the Get PHP details endpoint to see the versions available for the website.", "method": "PATCH", "path": "/api/hosting/v1/accounts/{username}/websites/{domain}/php/version", "inputSchema": { "type": "object", "properties": { "username": { "type": "string", "description": "username parameter" }, "domain": { "type": "string", "description": "Domain name" }, "version": { "type": "string", "description": "PHP version to switch the website to." } }, "required": [ "username", "domain", "version" ] }, "security": [ { "apiToken": [] } ], "group": "hosting" }, { "name": "hosting_redirects_list-website", "title": "List website redirects", "annotations": { "title": "List website redirects", "readOnlyHint": true, "destructiveHint": false }, "description": "Returns a paginated list of redirects configured for the selected website.", "method": "GET", "path": "/api/hosting/v1/accounts/{username}/websites/{domain}/redirects", "inputSchema": { "type": "object", "properties": { "username": { "type": "string", "description": "username parameter" }, "domain": { "type": "string", "description": "Domain name" }, "page": { "type": "integer", "description": "Page number" }, "per_page": { "type": "integer", "description": "Number of items per page" } }, "required": [ "username", "domain" ] }, "security": [ { "apiToken": [] } ], "group": "hosting" }, { "name": "hosting_redirects_create-website", "title": "Create website redirect", "annotations": { "title": "Create website redirect", "readOnlyHint": false, "destructiveHint": false }, "description": "Creates a redirect from a URL on the selected website to another URL or IP address.", "method": "POST", "path": "/api/hosting/v1/accounts/{username}/websites/{domain}/redirects", "inputSchema": { "type": "object", "properties": { "username": { "type": "string", "description": "username parameter" }, "domain": { "type": "string", "description": "Domain name" }, "from": { "type": "string", "description": "Source URL on the selected website" }, "to": { "type": "string", "description": "Destination URL or IP address" } }, "required": [ "username", "domain", "from", "to" ] }, "security": [ { "apiToken": [] } ], "group": "hosting" }, { "name": "hosting_redirects_delete-website", "title": "Delete website redirect", "annotations": { "title": "Delete website redirect", "readOnlyHint": false, "destructiveHint": true, "idempotentHint": true }, "description": "Permanently deletes the redirect identified by its source URL.\n\nPass the `from` value exactly as returned by the list redirects endpoint.", "method": "DELETE", "path": "/api/hosting/v1/accounts/{username}/websites/{domain}/redirects", "inputSchema": { "type": "object", "properties": { "username": { "type": "string", "description": "username parameter" }, "domain": { "type": "string", "description": "Domain name" }, "from": { "type": "string", "description": "Source URL returned by the list redirects endpoint." } }, "required": [ "username", "domain", "from" ] }, "security": [ { "apiToken": [] } ], "group": "hosting" }, { "name": "hosting_ssl_install", "title": "Install SSL", "annotations": { "title": "Install SSL", "readOnlyHint": false, "destructiveHint": false }, "description": "Requests a lifetime SSL certificate for the website. The installation runs in the background;\n`Get SSL status` reports `active` or `failed` when it ends. An `active` lifetime certificate\ndoes not block the request: a new installation is requested, which is how a certificate is\nreinstalled.\n\nReturns 422 for free subdomains (their certificate is managed by the platform), while an\ninstallation is `installing` or `waiting_for_retry`, when the website's certificate was\nrevoked (it cannot be reissued), and when an uploaded custom certificate is installed; that\none has to be uninstalled first.", "method": "POST", "path": "/api/hosting/v1/accounts/{username}/websites/{domain}/ssl/setup", "inputSchema": { "type": "object", "properties": { "username": { "type": "string", "description": "username parameter" }, "domain": { "type": "string", "description": "Domain name" } }, "required": [ "username", "domain" ] }, "security": [ { "apiToken": [] } ], "group": "hosting" }, { "name": "hosting_ssl_status", "title": "Get SSL status", "annotations": { "title": "Get SSL status", "readOnlyHint": true, "destructiveHint": false }, "description": "Returns the SSL state of the website: the certificate `status` and `provider`, whether the\ncertificate is a lifetime one managed by the platform, whether HTTP requests are redirected to\nHTTPS, when the certificate stops being valid and the last installation error.\n\n`installing` and `waiting_for_retry` mean an installation is in progress. `failed` means the\nlast installation gave up, or the website was not updated for 60 minutes while `installing`;\n`last_error` holds the reason when it is a known message, otherwise it is null. `expired`\nmeans the assigned certificate's validity has ended. `not_installed` means no certificate is\nassigned. Free subdomains use a platform-managed certificate: with no installation recorded\nthey report `active` with `provider` and `expires_at` null.", "method": "GET", "path": "/api/hosting/v1/accounts/{username}/websites/{domain}/ssl/status", "inputSchema": { "type": "object", "properties": { "username": { "type": "string", "description": "username parameter" }, "domain": { "type": "string", "description": "Domain name" } }, "required": [ "username", "domain" ] }, "security": [ { "apiToken": [] } ], "group": "hosting" }, { "name": "hosting_ssl_toggle-https-redirect", "title": "Toggle HTTPS redirect", "annotations": { "title": "Toggle HTTPS redirect", "readOnlyHint": false, "destructiveHint": true, "idempotentHint": true }, "description": "Turns the HTTP to HTTPS redirect of the website on or off, based on `is_enabled`. Does\nnothing when the redirect is already in the requested state. Turning it on requires an\ninstalled certificate (`status` `active` or `expired` on `Get SSL status`) and returns 422\nwhen there is none; turning it off is always accepted.", "method": "PATCH", "path": "/api/hosting/v1/accounts/{username}/websites/{domain}/ssl/https-redirect/toggle", "inputSchema": { "type": "object", "properties": { "username": { "type": "string", "description": "username parameter" }, "domain": { "type": "string", "description": "Domain name" }, "is_enabled": { "type": "boolean", "description": "Turn the HTTP to HTTPS redirect on (true) or off (false) for the website." } }, "required": [ "username", "domain", "is_enabled" ] }, "security": [ { "apiToken": [] } ], "group": "hosting" }, { "name": "hosting_ssl_uninstall", "title": "Uninstall SSL", "annotations": { "title": "Uninstall SSL", "readOnlyHint": false, "destructiveHint": true, "idempotentHint": true }, "description": "Removes the SSL certificate assigned to the website, turns the HTTPS redirect off and cancels\na pending installation retry. The website serves plain HTTP until a new installation\ncompletes. `Get SSL status` reports `not_installed` as soon as the call returns; the call also\nsucceeds when no certificate is assigned, so repeating it is safe.\n\nReturns 422 for free subdomains (their certificate is managed by the platform) and while an\ninstallation is `installing`.", "method": "DELETE", "path": "/api/hosting/v1/accounts/{username}/websites/{domain}/ssl", "inputSchema": { "type": "object", "properties": { "username": { "type": "string", "description": "username parameter" }, "domain": { "type": "string", "description": "Domain name" } }, "required": [ "username", "domain" ] }, "security": [ { "apiToken": [] } ], "group": "hosting" }, { "name": "hosting_websites_list", "title": "List websites", "annotations": { "title": "List websites", "readOnlyHint": true, "destructiveHint": false }, "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.", "method": "GET", "path": "/api/hosting/v1/websites", "inputSchema": { "type": "object", "properties": { "page": { "type": "integer", "description": "Page number" }, "per_page": { "type": "integer", "description": "Number of items per page" }, "username": { "type": "string", "description": "Filter by specific username" }, "order_id": { "type": "integer", "description": "Order ID" }, "is_enabled": { "type": "boolean", "description": "Filter by enabled status" }, "domain": { "type": "string", "description": "Filter by domain name (case-insensitive substring match)" }, "website_types": { "type": "array", "description": "Filter by detected website type, e.g. wordpress,nodejs. Accepts a comma-separated list.", "items": { "type": "string", "description": "website_types parameter", "enum": [ "wordpress", "builder", "horizons", "nodejs", "other" ] } } }, "required": [] }, "security": [ { "apiToken": [] } ], "group": "hosting" }, { "name": "hosting_websites_create", "title": "Create website", "annotations": { "title": "Create website", "readOnlyHint": false, "destructiveHint": false }, "description": "Deprecated: use `POST /api/hosting/v1/orders/{order_id}/onboardings` (start website setup)\ninstead. It takes the same `domain` and `datacenter_code`, can also install WordPress, and\nreturns the created setup.\n\nCreate 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\nOnly Web and Cloud hosting orders are accepted. To create a website on an Agency\nPlan order, use `POST /api/agency-hosting/v1/orders/{order_id}/websites/setups`.\n\nWhen the order has no hosting account yet, a new hosting account is set up first, in the\ndatacenter given by `datacenter_code` or the order's default datacenter when it is omitted.\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.", "method": "POST", "path": "/api/hosting/v1/websites", "inputSchema": { "type": "object", "properties": { "domain": { "type": "string", "description": "Domain name for the website. Cannot start with \"www.\" and can have at most one subdomain level, e.g. `blog.example.com`." }, "order_id": { "type": "integer", "description": "Hosting order ID to create this website on. Choose the order whose hosting plan should host the new website. List orders to find available IDs." }, "datacenter_code": { "type": "string", "description": "Datacenter for the hosting account when the order does not have one yet. Omit to use the order's default datacenter. Ignored when the order already has a hosting account. Must be an available datacenter; list available datacenters to find valid codes." } }, "required": [ "domain", "order_id" ] }, "security": [ { "apiToken": [] } ], "group": "hosting" }, { "name": "hosting_websites_deploy-static-site-archive", "title": "Deploy static site archive", "annotations": { "title": "Deploy static site archive", "readOnlyHint": false, "destructiveHint": true }, "description": "Deploy a static application from an archive file.\n\nWARNING: this overwrites the website's existing contents and cannot be undone —\nverify this is intended before calling this endpoint.\n\nThis endpoint allows you to deploy a static application from an archive\nfile that has been uploaded to the website's directory.\n\nThis only works for static sites (pre-built HTML/CSS/JS with no build step). For\nNode.js applications, use `Create NodeJS build from archive` instead, or\n`Start Node.js build` if the archive is already uploaded. For WordPress sites,\nuse `Import WordPress website`.", "method": "POST", "path": "/api/hosting/v1/accounts/{username}/websites/{domain}/deploy", "inputSchema": { "type": "object", "properties": { "username": { "type": "string", "description": "username parameter" }, "domain": { "type": "string", "description": "Domain name" }, "archive_path": { "type": "string", "description": "Relative path to the archive file from website root directory" } }, "required": [ "username", "domain", "archive_path" ] }, "security": [ { "apiToken": [] } ], "group": "hosting", "hidden": true }, { "name": "hosting_websites_delete", "title": "Delete website", "annotations": { "title": "Delete website", "readOnlyHint": false, "destructiveHint": true, "idempotentHint": true }, "description": "This endpoint permanently removes a website and all of its data. This action\ncannot be undone. Before calling it, make sure the user understands the\nconsequences and explicitly confirms that they want to proceed.\n\nAll website files, databases and related configuration will be removed.\nThe hosting plan itself is kept, so a new website can be created on it afterwards.\n\nSupported websites: main and addon domain websites on web hosting plans, and\nWebsite Builder websites. Parked domains and subdomains cannot be deleted with\nthis endpoint. The domain must be the exact website domain, not a preview\ndomain or an alias.\n\nReturns 404 when the domain does not exist or does not belong to the\nauthenticated client.\n\nWebsite removal is processed asynchronously and can take a few minutes to\ncomplete. The response returns before the removal finishes.", "method": "DELETE", "path": "/api/hosting/v1/websites/{domain}", "inputSchema": { "type": "object", "properties": { "domain": { "type": "string", "description": "Domain name" } }, "required": [ "domain" ] }, "security": [ { "apiToken": [] } ], "group": "hosting" } ]; export default tools;