// Auto-generated tool list for group: all 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": "agency-hosting_deploy-node-static-website", "title": "Deploy node-static website", "annotations": { "title": "Deploy node-static website", "readOnlyHint": false, "destructiveHint": true }, "topic": "agency-hosting", "description": "Deploy a node-static Agency Plan (h5g) website from an archive file. WARNING: this overwrites the website's existing contents and cannot be undone — always confirm with the user before proceeding. Use this for Agency Plan websites of type node-static (a Node.js-built static site that requires a build step or a plain simple static site). The tool resolves the website from its domain, uploads the archive to the website's file browser over TUS, and triggers the build-assets process which builds the site and deploys the result to public_html. This operation is synchronous: the build and deployment complete before the tool returns, so the website is live as soon as the tool finishes successfully — there is no separate asynchronous build to wait for or poll. 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. For plain PHP applications that should be extracted as-is, use agency-hosting_deploy-php-application instead. The website UID is automatically resolved from the domain.", "method": "", "path": "", "inputSchema": { "type": "object", "properties": { "domain": { "type": "string", "description": "Domain name of the Agency Plan website (e.g., example.com)" }, "archivePath": { "type": "string", "description": "Absolute or relative path to the website archive file. Supported formats: zip, tar, tar.gz, tgz. The archive must contain the application source files. If user provides a directory path, create an archive from it before proceeding using EXACTLY this naming pattern: directoryname_YYYYMMDD_HHMMSS.zip (e.g., mywebsite_20250115_143022.zip)" }, "removeArchive": { "type": "boolean", "description": "Whether to remove the local archive file after successful deployment (default: true)" } }, "required": [ "domain", "archivePath" ] }, "security": [], "custom": true, "templateFile": "deploy-node-static.template.js", "templateFileTS": "deploy-node-static.template.ts", "handlerMethod": "handleNodeStaticDeploy", "group": "agency-hosting" }, { "name": "agency-hosting_deploy-php-application", "title": "Deploy PHP application", "annotations": { "title": "Deploy PHP application", "readOnlyHint": false, "destructiveHint": true }, "topic": "agency-hosting", "description": "Deploy a PHP (or other non-build) Agency Plan (h5g) website from an archive file. WARNING: this overwrites the website's existing contents and cannot be undone — always confirm with the user before proceeding. Use this for Agency Plan websites where the archive contents should be extracted and served as-is with no build step (e.g., PHP applications). The tool resolves the website from its domain, uploads the archive to the website's file browser over TUS, and triggers the import-archive process which overwrites the website contents with the archive contents. This operation is synchronous: the archive is extracted and deployed before the tool returns, so the website is live as soon as the tool finishes successfully — there is no separate asynchronous build to wait for or poll. 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. For node-static websites that require a build step, use agency-hosting_deploy-node-static-website instead. The website UID is automatically resolved from the domain.", "method": "", "path": "", "inputSchema": { "type": "object", "properties": { "domain": { "type": "string", "description": "Domain name of the Agency Plan website (e.g., example.com)" }, "archivePath": { "type": "string", "description": "Absolute or relative path to the website archive file. Supported formats: zip, tar, tar.gz, tgz. If user provides a directory path, create an archive from it before proceeding using EXACTLY this naming pattern: directoryname_YYYYMMDD_HHMMSS.zip (e.g., mywebsite_20250115_143022.zip)" }, "removeArchive": { "type": "boolean", "description": "Whether to remove the local archive file after successful deployment (default: true)" } }, "required": [ "domain", "archivePath" ] }, "security": [], "custom": true, "templateFile": "deploy-php-app.template.js", "templateFileTS": "deploy-php-app.template.ts", "handlerMethod": "handlePhpAppDeploy", "group": "agency-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": "agency-hosting_datacenters_list", "title": "List available datacenters", "annotations": { "title": "List available datacenters", "readOnlyHint": true, "destructiveHint": false }, "description": "Lists the datacenters available for provisioning a new website on the given Agency Plan\nhosting order.\n\nEach datacenter includes a `pinger_url` you can ping from the client to measure round-trip\nlatency; comparing the results across datacenters lets you pick the nearest one (lowest\nping) before choosing its `code` as the `datacenter_code` when creating a website setup.", "method": "GET", "path": "/api/agency-hosting/v1/orders/{order_id}/datacenters", "inputSchema": { "type": "object", "properties": { "order_id": { "type": "integer", "description": "Agency Plan order ID" } }, "required": [ "order_id" ] }, "security": [ { "apiToken": [] } ], "group": "agency-hosting" }, { "name": "agency-hosting_domains_change-website", "title": "Change website domain", "annotations": { "title": "Change website domain", "readOnlyHint": false, "destructiveHint": true, "idempotentHint": true }, "description": "Changes the primary domain for an Agency Plan website.\n\nProvide the current domain in the path and the new domain in the request body.\nSet domain to null to revert to the temporary domain.", "method": "PUT", "path": "/api/agency-hosting/v1/websites/{website_uid}/domains/{from_domain}", "inputSchema": { "type": "object", "properties": { "website_uid": { "type": "string", "description": "Agency Plan website UID" }, "from_domain": { "type": "string", "description": "Current domain name to change from" }, "domain": { "type": "string", "description": "New domain to assign to the website. Set to null to revert to the temporary domain." } }, "required": [ "website_uid", "from_domain", "domain" ] }, "security": [ { "apiToken": [] } ], "group": "agency-hosting" }, { "name": "agency-hosting_domains_link-to-website", "title": "Link domain to website", "annotations": { "title": "Link domain to website", "readOnlyHint": false, "destructiveHint": false }, "description": "Links a domain to the specified Agency Plan website so it can serve traffic for that domain.", "method": "POST", "path": "/api/agency-hosting/v1/websites/{website_uid}/domains", "inputSchema": { "type": "object", "properties": { "website_uid": { "type": "string", "description": "Agency Plan website UID" }, "domain": { "type": "string", "description": "Fully qualified domain name to link to the website" } }, "required": [ "website_uid", "domain" ] }, "security": [ { "apiToken": [] } ], "group": "agency-hosting" }, { "name": "agency-hosting_domains_list", "title": "List domains", "annotations": { "title": "List domains", "readOnlyHint": true, "destructiveHint": false }, "description": "Returns a paginated list of domains associated with Agency Plan websites accessible to the authenticated client.\n\nUse the website_uuids filter to narrow results to specific websites.", "method": "GET", "path": "/api/agency-hosting/v1/domains", "inputSchema": { "type": "object", "properties": { "page": { "type": "integer", "description": "Page number" }, "per_page": { "type": "integer", "description": "Number of items per page" }, "website_uuids": { "type": "array", "description": "Filter by website UIDs", "items": { "type": "string", "description": "website_uuids parameter" } } }, "required": [] }, "security": [ { "apiToken": [] } ], "group": "agency-hosting" }, { "name": "agency-hosting_domains_unlink-from-website", "title": "Unlink domain from website", "annotations": { "title": "Unlink domain from website", "readOnlyHint": false, "destructiveHint": true, "idempotentHint": true }, "description": "Unlinks a domain from the specified Agency Plan website.\n\nThe website stops serving traffic on this domain immediately.\n\nWebsite files and database are preserved, and any other linked domains remain accessible.\n\nIf this is the only domain on the website, unlinking leaves the website without an accessible domain.", "method": "DELETE", "path": "/api/agency-hosting/v1/websites/{website_uid}/domains/{domain}", "inputSchema": { "type": "object", "properties": { "website_uid": { "type": "string", "description": "Agency Plan website UID" }, "domain": { "type": "string", "description": "Domain name" } }, "required": [ "website_uid", "domain" ] }, "security": [ { "apiToken": [] } ], "group": "agency-hosting" }, { "name": "agency-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 for uploading files\nto an Agency Plan website's file storage.\n\nReturns `url`, `auth_key` and `rest_auth_key`. Use these to upload a file to the\nwebsite's file storage via the TUS resumable upload protocol (TUS 1.0.0). Send\n`X-Auth: {auth_key}` and `X-Auth-Rest: {rest_auth_key}` headers on every request below.\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 the website's file storage, e.g.\n`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/agency-hosting/v1/websites/{website_uid}/files/upload-urls", "inputSchema": { "type": "object", "properties": { "website_uid": { "type": "string", "description": "Agency Plan website UID" } }, "required": [ "website_uid" ] }, "security": [ { "apiToken": [] } ], "group": "agency-hosting" }, { "name": "agency-hosting_files_import-website-from-archive", "title": "Import website from archive", "annotations": { "title": "Import website from archive", "readOnlyHint": false, "destructiveHint": true }, "description": "Imports an Agency Plan website from an already-uploaded archive.\n\nUpload the archive to the website's root directory via file browser first, then provide its\nfilename in this request. Website contents are overwritten by the archive contents. Supported\narchive types: .zip, .tar, .tar.gz, .tgz.", "method": "POST", "path": "/api/agency-hosting/v1/websites/{website_uid}/files/import-archive", "inputSchema": { "type": "object", "properties": { "website_uid": { "type": "string", "description": "Agency Plan website UID" }, "archive_name": { "type": "string", "description": "Archive filename (e.g., archive.zip). The file must already be uploaded to the website's .h5g/ directory." } }, "required": [ "website_uid", "archive_name" ] }, "security": [ { "apiToken": [] } ], "group": "agency-hosting" }, { "name": "agency-hosting_metrics_list-plan-order-disk-usage", "title": "List Agency Plan order disk usage metrics", "annotations": { "title": "List Agency Plan order disk usage metrics", "readOnlyHint": true, "destructiveHint": false }, "description": "Returns aggregated disk and inode usage for the Agency Plan order over the\nselected time frame, plus the plan quotas. Figures cover the whole order\naccount. Values may be up to one hour stale. CPU, memory, and process usage\nare on the resource-usage-metrics endpoint.", "method": "GET", "path": "/api/agency-hosting/v1/orders/{order_id}/disk-usage-metrics", "inputSchema": { "type": "object", "properties": { "order_id": { "type": "integer", "description": "Agency Plan order ID" }, "time_frame_days": { "type": "integer", "description": "Length of the window in days, ending now. Bucket size grows with the window.", "enum": [ 1, 7, 14, 30 ] } }, "required": [ "order_id" ] }, "security": [ { "apiToken": [] } ], "group": "agency-hosting" }, { "name": "agency-hosting_orders_list", "title": "List orders", "annotations": { "title": "List orders", "readOnlyHint": true, "destructiveHint": false }, "description": "Returns a paginated list of Agency Plan orders accessible to the authenticated client.", "method": "GET", "path": "/api/agency-hosting/v1/orders", "inputSchema": { "type": "object", "properties": { "page": { "type": "integer", "description": "Page number" }, "per_page": { "type": "integer", "description": "Number of items per page" } }, "required": [] }, "security": [ { "apiToken": [] } ], "group": "agency-hosting" }, { "name": "agency-hosting_metrics_list-order-resource-usage", "title": "List order resource usage metrics", "annotations": { "title": "List order resource usage metrics", "readOnlyHint": true, "destructiveHint": false }, "description": "Returns aggregated CPU, memory, and process usage for the Agency Plan order\nover the selected time frame, plus the plan quotas and a per-website\nbreakdown. Each website is identified by uid. Suspended and deleted websites\nare excluded from both the order totals and the per-website breakdown.\nValues may be up to one hour stale. Disk and inode usage are on the\ndisk-usage-metrics endpoint.", "method": "GET", "path": "/api/agency-hosting/v1/orders/{order_id}/resource-usage-metrics", "inputSchema": { "type": "object", "properties": { "order_id": { "type": "integer", "description": "Agency Plan order ID" }, "time_frame_hours": { "type": "integer", "description": "Length of the window in hours, ending now. Bucket size grows with the window.", "enum": [ 1, 24, 168, 336, 720 ] } }, "required": [ "order_id" ] }, "security": [ { "apiToken": [] } ], "group": "agency-hosting" }, { "name": "agency-hosting_php_list-extensions-for-website", "title": "List PHP extensions for a website", "annotations": { "title": "List PHP extensions for a website", "readOnlyHint": true, "destructiveHint": false }, "description": "Lists every PHP extension available to an Agency Plan website and whether it is currently enabled.", "method": "GET", "path": "/api/agency-hosting/v1/websites/{website_uid}/php-settings/extensions", "inputSchema": { "type": "object", "properties": { "website_uid": { "type": "string", "description": "Agency Plan website UID" } }, "required": [ "website_uid" ] }, "security": [ { "apiToken": [] } ], "group": "agency-hosting" }, { "name": "agency-hosting_php_replace-website-extensions", "title": "Replace website PHP extensions", "annotations": { "title": "Replace website PHP extensions", "readOnlyHint": false, "destructiveHint": true, "idempotentHint": true }, "description": "Replaces the set of PHP extensions enabled on an Agency Plan website with the ones provided. Any toggleable extension not in the request is disabled, so call the extensions endpoint first and send the full desired set. Extensions compiled into PHP, reported with the \"built-in\" state, are always active and are unaffected.", "method": "PUT", "path": "/api/agency-hosting/v1/websites/{website_uid}/php-settings/extensions", "inputSchema": { "type": "object", "properties": { "website_uid": { "type": "string", "description": "Agency Plan website UID" }, "extensions": { "type": "array", "description": "Extension names, exactly as returned by the extensions endpoint.", "items": { "type": "string", "description": "extensions parameter" } } }, "required": [ "website_uid", "extensions" ] }, "security": [ { "apiToken": [] } ], "group": "agency-hosting" }, { "name": "agency-hosting_php_list-options-for-website", "title": "List PHP options for a website", "annotations": { "title": "List PHP options for a website", "readOnlyHint": true, "destructiveHint": false }, "description": "Lists the php.ini directives that can be configured for an Agency Plan website, each with its default, the value currently in effect, and the values it accepts.", "method": "GET", "path": "/api/agency-hosting/v1/websites/{website_uid}/php-settings/options", "inputSchema": { "type": "object", "properties": { "website_uid": { "type": "string", "description": "Agency Plan website UID" } }, "required": [ "website_uid" ] }, "security": [ { "apiToken": [] } ], "group": "agency-hosting" }, { "name": "agency-hosting_php_replace-website-options", "title": "Replace website PHP options", "annotations": { "title": "Replace website PHP options", "readOnlyHint": false, "destructiveHint": true, "idempotentHint": true }, "description": "Replaces the custom php.ini values on an Agency Plan website with the ones provided. Any option not in the request is reset to its default, so call the options endpoint first and send the full desired set. Sending an empty array resets every option to its default.", "method": "PUT", "path": "/api/agency-hosting/v1/websites/{website_uid}/php-settings/options", "inputSchema": { "type": "object", "properties": { "website_uid": { "type": "string", "description": "Agency Plan website UID" }, "options": { "type": "array", "description": "Option names and values. Each name must be one of the options returned by the options endpoint, and each value must satisfy that option's allowed_values when it declares them.", "items": { "type": "object", "description": "options parameter", "properties": { "name": { "type": "string", "description": "php.ini directive name." }, "value": { "type": "string", "description": "Value to apply." } }, "required": [ "name", "value" ] } } }, "required": [ "website_uid", "options" ] }, "security": [ { "apiToken": [] } ], "group": "agency-hosting" }, { "name": "agency-hosting_php_list-versions-for-order", "title": "List available PHP versions for an order", "annotations": { "title": "List available PHP versions for an order", "readOnlyHint": true, "destructiveHint": false }, "description": "Lists the PHP versions available to websites created under an Agency Plan order, determined by the server the order is hosted on. Use this before creating a website; for a website that already exists, call the website-scoped versions endpoint instead.", "method": "GET", "path": "/api/agency-hosting/v1/orders/{order_id}/websites/php-settings/versions", "inputSchema": { "type": "object", "properties": { "order_id": { "type": "integer", "description": "Agency Plan order ID" } }, "required": [ "order_id" ] }, "security": [ { "apiToken": [] } ], "group": "agency-hosting" }, { "name": "agency-hosting_php_list-versions-for-website", "title": "List available PHP versions for a website", "annotations": { "title": "List available PHP versions for a website", "readOnlyHint": true, "destructiveHint": false }, "description": "Lists the PHP versions an Agency Plan website can be switched to. The version the website is currently running is returned as settings.php.version by the website details endpoint.", "method": "GET", "path": "/api/agency-hosting/v1/websites/{website_uid}/php-settings/versions", "inputSchema": { "type": "object", "properties": { "website_uid": { "type": "string", "description": "Agency Plan website UID" } }, "required": [ "website_uid" ] }, "security": [ { "apiToken": [] } ], "group": "agency-hosting" }, { "name": "agency-hosting_php_update-website-version", "title": "Update website PHP version", "annotations": { "title": "Update website PHP version", "readOnlyHint": false, "destructiveHint": true, "idempotentHint": true }, "description": "Switches an Agency Plan website to a different PHP version. Call the available versions endpoint first to see which versions can be selected. The website restarts on the new version, so requests served during the switch may fail and code that is incompatible with the target version will break.", "method": "PATCH", "path": "/api/agency-hosting/v1/websites/{website_uid}/php-settings/version", "inputSchema": { "type": "object", "properties": { "website_uid": { "type": "string", "description": "Agency Plan website UID" }, "version": { "type": "string", "description": "PHP version to switch the website to, as major.minor. Must be one of the versions returned by the available versions endpoint." } }, "required": [ "website_uid", "version" ] }, "security": [ { "apiToken": [] } ], "group": "agency-hosting" }, { "name": "agency-hosting_website-setups_create", "title": "Create a new website", "annotations": { "title": "Create a new website", "readOnlyHint": false, "destructiveHint": false }, "description": "Provisions a new website on one of your Agency Plan hosting orders.\n\nChoose the datacenter, stack (`flavor`), and PHP version for the site. Optionally attach\nyour own `domain` — omit it, set it to `null`, or leave it unavailable and a free\n`*.hostingersite.com` subdomain is generated instead — and/or install WordPress by\nsupplying the `wordpress` details (admin account, site title, and language).\n\nCommon setups:\n- **Plain PHP site**: `flavor` set to `php-fpm`, with `settings.php.version`; omit\n `wordpress` and `type`.\n- **WordPress site**: `flavor` set to the desired WordPress version (e.g. `wp-7.0`), plus\n the `wordpress` block (admin account, title, language).\n- **Static/Node.js frontend app**: `flavor` set to `php-fpm` and `type` set to\n `node-static`.\n\nProvisioning runs in the background, so the response returns immediately with a setup UUID\nthat identifies the job. The new website becomes reachable once provisioning finishes.", "method": "POST", "path": "/api/agency-hosting/v1/orders/{order_id}/websites/setups", "inputSchema": { "type": "object", "properties": { "order_id": { "type": "integer", "description": "Agency Plan order ID" }, "datacenter_code": { "type": "string", "description": "Datacenter code where the website should be provisioned. Available codes depend on live capacity and are not a fixed set." }, "flavor": { "type": "string", "description": "Setup flavor: a specific WordPress version in the format `wp-.` or `wp-..` (e.g. `wp-6.8.2`), or `php-fpm` for a plain PHP stack. Generic versions like `wp-latest` are not allowed." }, "settings": { "type": "object", "description": "Website settings", "properties": { "php": { "type": "object", "description": "php parameter", "properties": { "version": { "type": "string", "description": "PHP version" } }, "required": [ "version" ] } }, "required": [ "php" ] }, "domain": { "type": "string", "description": "Primary domain to attach to the website. Omit or set to null to get a free auto-generated *.hostingersite.com subdomain instead." }, "type": { "type": "string", "description": "Website type", "enum": [ "node-static" ] }, "wordpress": { "type": "object", "description": "WordPress installation options", "properties": { "language": { "type": "string", "description": "language parameter" }, "title": { "type": "string", "description": "title parameter" }, "admin": { "type": "object", "description": "admin parameter", "properties": { "user": { "type": "string", "description": "user parameter" }, "password": { "type": "string", "description": "password parameter" }, "email": { "type": "string", "description": "email parameter" } }, "required": [ "user", "password", "email" ] } }, "required": [ "language", "title", "admin" ] } }, "required": [ "order_id", "datacenter_code", "flavor", "settings" ] }, "security": [ { "apiToken": [] } ], "group": "agency-hosting" }, { "name": "agency-hosting_website-setups_status", "title": "Get website setup status", "annotations": { "title": "Get website setup status", "readOnlyHint": true, "destructiveHint": false }, "description": "Returns the current status of an Agency Plan website setup started via the setups\nendpoint.\n\nPoll this endpoint using the `setup_uuid` returned from the provisioning request until\n`status` becomes `completed`, at which point `website_uid` identifies the new website.", "method": "GET", "path": "/api/agency-hosting/v1/orders/{order_id}/websites/setups/{setup_uuid}", "inputSchema": { "type": "object", "properties": { "order_id": { "type": "integer", "description": "Agency Plan order ID" }, "setup_uuid": { "type": "string", "description": "Website setup UUID" } }, "required": [ "order_id", "setup_uuid" ] }, "security": [ { "apiToken": [] } ], "group": "agency-hosting" }, { "name": "agency-hosting_ssl_reinstall-website", "title": "Reinstall website SSL", "annotations": { "title": "Reinstall website SSL", "readOnlyHint": false, "destructiveHint": false }, "description": "Replaces the Let's Encrypt certificate of the domain: the current platform certificate, when\none is recorded, is revoked and removed, then a new setup starts in the background. Returns at\nonce; `Get website SSL status` reports `installing` while it runs, then `active` or `failed`.\n\nReturns 422 for free subdomains, when a certificate process is recorded for the domain (a\nfailed setup counts until it is cleaned up), or when the domain hit its limit of three setups\nper seven days. Returns 429 when the same domain was requested less than a minute ago, and 403\nwhen the website is suspended or locked, and 404 when the website or the domain does not exist.", "method": "POST", "path": "/api/agency-hosting/v1/websites/{website_uid}/domains/{domain}/ssl/reinstall", "inputSchema": { "type": "object", "properties": { "website_uid": { "type": "string", "description": "Agency Plan website UID" }, "domain": { "type": "string", "description": "Domain name" } }, "required": [ "website_uid", "domain" ] }, "security": [ { "apiToken": [] } ], "group": "agency-hosting" }, { "name": "agency-hosting_ssl_install-website", "title": "Install website SSL", "annotations": { "title": "Install website SSL", "readOnlyHint": false, "destructiveHint": false }, "description": "Starts a Let's Encrypt certificate setup for the domain and returns at once; the setup runs in\nthe background. `Get website SSL status` reports `installing` while it runs, then `active` or\n`failed`; the `ssl_setup` entry of `List website processes` shows the same progress.\n\nReturns 422 when the domain already has a platform certificate that is not expired, when a\ncertificate process is recorded for the domain (a failed setup counts until it is cleaned up),\nor when the domain hit its limit of three setups per seven days. Returns 429 when the same\ndomain was requested less than a minute ago, 403 when the website is suspended or locked, and\n404 when the website or the domain does not exist.", "method": "POST", "path": "/api/agency-hosting/v1/websites/{website_uid}/domains/{domain}/ssl/setup", "inputSchema": { "type": "object", "properties": { "website_uid": { "type": "string", "description": "Agency Plan website UID" }, "domain": { "type": "string", "description": "Domain name" } }, "required": [ "website_uid", "domain" ] }, "security": [ { "apiToken": [] } ], "group": "agency-hosting" }, { "name": "agency-hosting_ssl_website-status", "title": "Get website SSL status", "annotations": { "title": "Get website SSL status", "readOnlyHint": true, "destructiveHint": false }, "description": "Returns the SSL state of one domain of an Agency Plan website: the certificate `status`,\nwhether the certificate was uploaded by the customer, and when it stops being valid.\n\n`installing` means a certificate setup is running or retrying; the `ssl_setup` entry of\n`List website processes` shows the same progress. `active` means a valid certificate is in\nplace: uploaded by the customer, issued by the platform, or a lifetime certificate bought for\nthe domain. `failed` means the last setup gave up and no valid certificate is in place.\n`expired` means the certificate has run out. `not_installed` means the domain has no\ncertificate and no setup process. Returns 404 when the website or the domain does not exist.", "method": "GET", "path": "/api/agency-hosting/v1/websites/{website_uid}/domains/{domain}/ssl/status", "inputSchema": { "type": "object", "properties": { "website_uid": { "type": "string", "description": "Agency Plan website UID" }, "domain": { "type": "string", "description": "Domain name" } }, "required": [ "website_uid", "domain" ] }, "security": [ { "apiToken": [] } ], "group": "agency-hosting" }, { "name": "agency-hosting_ssl_uninstall-website", "title": "Uninstall website SSL", "annotations": { "title": "Uninstall website SSL", "readOnlyHint": false, "destructiveHint": true, "idempotentHint": true }, "description": "Removes the platform-issued Let's Encrypt certificate of the domain: the certificate is revoked\nand deleted before the response, so the domain is no longer served with a platform certificate\nuntil a new setup completes. Also succeeds when the domain has no platform certificate to\nremove. Uploaded (custom) certificates are not affected.\n\nReturns 422 when a certificate process is recorded for the domain (a failed setup counts until\nit is cleaned up), 429 when the same domain was requested less than a minute ago, and 403 when\nthe website is suspended or locked, and 404 when the website or the domain does not exist.", "method": "DELETE", "path": "/api/agency-hosting/v1/websites/{website_uid}/domains/{domain}/ssl", "inputSchema": { "type": "object", "properties": { "website_uid": { "type": "string", "description": "Agency Plan website UID" }, "domain": { "type": "string", "description": "Domain name" } }, "required": [ "website_uid", "domain" ] }, "security": [ { "apiToken": [] } ], "group": "agency-hosting" }, { "name": "agency-hosting_websites_build-nodejs-assets", "title": "Build website NodeJS assets", "annotations": { "title": "Build website NodeJS assets", "readOnlyHint": false, "destructiveHint": false }, "description": "Builds and deploys a Node.js application for an Agency Plan website from an already-uploaded archive.\n\nUpload the archive to file browser first, then provide its relative path from document root in this request.\nWebsite contents are overwritten by the build result, which is deployed to public_html.", "method": "POST", "path": "/api/agency-hosting/v1/websites/{website_uid}/build-assets", "inputSchema": { "type": "object", "properties": { "website_uid": { "type": "string", "description": "Agency Plan website UID" }, "archive_path": { "type": "string", "description": "Directory, relative to the website document root, where the uploaded site archive currently lives. Most commonly this is simply `public_html`." } }, "required": [ "website_uid", "archive_path" ] }, "security": [ { "apiToken": [] } ], "group": "agency-hosting" }, { "name": "agency-hosting_cache_clear-website", "title": "Clear website cache", "annotations": { "title": "Clear website cache", "readOnlyHint": false, "destructiveHint": true, "idempotentHint": true }, "description": "Clears cache for all domains associated with an Agency Plan website, including its preview domain.\n\nThis operation clears all cache types for the website.", "method": "DELETE", "path": "/api/agency-hosting/v1/websites/{website_uid}/cache", "inputSchema": { "type": "object", "properties": { "website_uid": { "type": "string", "description": "Agency Plan website UID" } }, "required": [ "website_uid" ] }, "security": [ { "apiToken": [] } ], "group": "agency-hosting" }, { "name": "agency-hosting_cron-jobs_list-website", "title": "List website cron jobs", "annotations": { "title": "List website cron jobs", "readOnlyHint": true, "destructiveHint": false }, "description": "Returns a paginated list of cron jobs configured for an Agency Plan website.\n\nEach entry includes the schedule expression and the command executed on that schedule.", "method": "GET", "path": "/api/agency-hosting/v1/websites/{website_uid}/cron-jobs", "inputSchema": { "type": "object", "properties": { "website_uid": { "type": "string", "description": "Agency Plan website UID" }, "page": { "type": "integer", "description": "Page number" }, "per_page": { "type": "integer", "description": "Number of items per page" } }, "required": [ "website_uid" ] }, "security": [ { "apiToken": [] } ], "group": "agency-hosting" }, { "name": "agency-hosting_cron-jobs_create-website", "title": "Create website cron job", "annotations": { "title": "Create website cron job", "readOnlyHint": false, "destructiveHint": false }, "description": "Creates a cron job for an Agency Plan website from a schedule expression and a command.\n\nReturns the created cron job, including its uuid, which is required to delete the cron job.", "method": "POST", "path": "/api/agency-hosting/v1/websites/{website_uid}/cron-jobs", "inputSchema": { "type": "object", "properties": { "website_uid": { "type": "string", "description": "Agency Plan website UID" }, "time": { "type": "string", "description": "Cron schedule expression (standard 5-field crontab syntax)." }, "command": { "type": "string", "description": "Command to run on the schedule. Must not contain pipe (|) or redirection (<, >) characters." } }, "required": [ "website_uid", "time", "command" ] }, "security": [ { "apiToken": [] } ], "group": "agency-hosting" }, { "name": "agency-hosting_cron-jobs_delete-website", "title": "Delete website cron job", "annotations": { "title": "Delete website cron job", "readOnlyHint": false, "destructiveHint": true, "idempotentHint": true }, "description": "Permanently deletes the cron job identified by its uuid from an Agency Plan website.\n\nThe operation is idempotent: deleting a cron job that does not exist succeeds without error.", "method": "DELETE", "path": "/api/agency-hosting/v1/websites/{website_uid}/cron-jobs/{uuid}", "inputSchema": { "type": "object", "properties": { "website_uid": { "type": "string", "description": "Agency Plan website UID" }, "uuid": { "type": "string", "description": "Unique identifier of the cron job as returned by the list cron jobs endpoint." } }, "required": [ "website_uid", "uuid" ] }, "security": [ { "apiToken": [] } ], "group": "agency-hosting" }, { "name": "agency-hosting_databases_list-website", "title": "List website databases", "annotations": { "title": "List website databases", "readOnlyHint": true, "destructiveHint": false }, "description": "Returns a paginated list of MySQL databases created for an Agency Plan website.\n\nEach entry includes the database's non-system users.", "method": "GET", "path": "/api/agency-hosting/v1/websites/{website_uid}/databases", "inputSchema": { "type": "object", "properties": { "website_uid": { "type": "string", "description": "Agency Plan website UID" }, "page": { "type": "integer", "description": "Page number" }, "per_page": { "type": "integer", "description": "Number of items per page" } }, "required": [ "website_uid" ] }, "security": [ { "apiToken": [] } ], "group": "agency-hosting" }, { "name": "agency-hosting_databases_create-website", "title": "Create website database", "annotations": { "title": "Create website database", "readOnlyHint": false, "destructiveHint": false }, "description": "Creates a MySQL database with a dedicated user for an Agency Plan website.\n\nThe database name, username, and password must all be provided by the caller.", "method": "POST", "path": "/api/agency-hosting/v1/websites/{website_uid}/databases", "inputSchema": { "type": "object", "properties": { "website_uid": { "type": "string", "description": "Agency Plan website UID" }, "database_name": { "type": "string", "description": "Database name to create (alphanumeric characters)." }, "database_user": { "type": "string", "description": "Database username to create alongside the database (alphanumeric characters)." }, "password": { "type": "string", "description": "Password for the database user (requires mixed case, letters, and numbers)." } }, "required": [ "website_uid", "database_name", "database_user", "password" ] }, "security": [ { "apiToken": [] } ], "group": "agency-hosting" }, { "name": "agency-hosting_databases_delete-website", "title": "Delete website database", "annotations": { "title": "Delete website database", "readOnlyHint": false, "destructiveHint": true, "idempotentHint": true }, "description": "Permanently deletes a MySQL database and all its data from an Agency Plan website, including its users.\n\nThe operation is idempotent: deleting a database that does not exist succeeds without error.", "method": "DELETE", "path": "/api/agency-hosting/v1/websites/{website_uid}/databases/{database_name}", "inputSchema": { "type": "object", "properties": { "website_uid": { "type": "string", "description": "Agency Plan website UID" }, "database_name": { "type": "string", "description": "Full database name as returned by the list databases endpoint." } }, "required": [ "website_uid", "database_name" ] }, "security": [ { "apiToken": [] } ], "group": "agency-hosting" }, { "name": "agency-hosting_databases_create-website-user", "title": "Create website database user", "annotations": { "title": "Create website database user", "readOnlyHint": false, "destructiveHint": false }, "description": "Creates a user for an existing database on an Agency Plan website.\n\nEach database supports a single non-system user; creating a user for a database that already has one fails.", "method": "POST", "path": "/api/agency-hosting/v1/websites/{website_uid}/databases/{database_name}/users", "inputSchema": { "type": "object", "properties": { "website_uid": { "type": "string", "description": "Agency Plan website UID" }, "database_name": { "type": "string", "description": "Full database name as returned by the list databases endpoint." }, "database_user": { "type": "string", "description": "Database username to create (alphanumeric and underscores)." }, "password": { "type": "string", "description": "Password for the database user (requires mixed case, letters, and numbers)." }, "host": { "type": "string", "description": "Host the user connects from (IPv4, IPv6, % wildcard, or localhost). Defaults to localhost." } }, "required": [ "website_uid", "database_name", "database_user", "password" ] }, "security": [ { "apiToken": [] } ], "group": "agency-hosting" }, { "name": "agency-hosting_databases_delete-website-user", "title": "Delete website database user", "annotations": { "title": "Delete website database user", "readOnlyHint": false, "destructiveHint": true, "idempotentHint": true }, "description": "Permanently deletes a database user from an Agency Plan website database, revoking all access it had.\n\nThe operation is idempotent: deleting a user that does not exist succeeds without error.", "method": "DELETE", "path": "/api/agency-hosting/v1/websites/{website_uid}/databases/{database_name}/users/{database_user_name}", "inputSchema": { "type": "object", "properties": { "website_uid": { "type": "string", "description": "Agency Plan website UID" }, "database_name": { "type": "string", "description": "Full database name as returned by the list databases endpoint." }, "database_user_name": { "type": "string", "description": "Database username as returned by the list databases endpoint." } }, "required": [ "website_uid", "database_name", "database_user_name" ] }, "security": [ { "apiToken": [] } ], "group": "agency-hosting" }, { "name": "agency-hosting_websites_get", "title": "Get website details", "annotations": { "title": "Get website details", "readOnlyHint": true, "destructiveHint": false }, "description": "Retrieves detailed information about a specific Agency Plan website, including configuration,\nstatus, metadata, hosting plan details, and resource quotas.", "method": "GET", "path": "/api/agency-hosting/v1/websites/{website_uid}", "inputSchema": { "type": "object", "properties": { "website_uid": { "type": "string", "description": "Agency Plan website UID" } }, "required": [ "website_uid" ] }, "security": [ { "apiToken": [] } ], "group": "agency-hosting" }, { "name": "agency-hosting_websites_delete", "title": "Delete website", "annotations": { "title": "Delete website", "readOnlyHint": false, "destructiveHint": true, "idempotentHint": true }, "description": "Permanently deletes an Agency Plan website. Deletion is processed asynchronously: the\nwebsite is immediately transitioned to a deleting state and the underlying server\nresources are removed in the background.", "method": "DELETE", "path": "/api/agency-hosting/v1/websites/{website_uid}", "inputSchema": { "type": "object", "properties": { "website_uid": { "type": "string", "description": "Agency Plan website UID" } }, "required": [ "website_uid" ] }, "security": [ { "apiToken": [] } ], "group": "agency-hosting" }, { "name": "agency-hosting_websites_list-plan", "title": "List Agency Plan websites", "annotations": { "title": "List Agency Plan websites", "readOnlyHint": true, "destructiveHint": false }, "description": "Retrieve a paginated list of Agency Plan websites (H5G, Builder, and Horizons) accessible to\nthe authenticated 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\nThe response shape differs per platform — see the `platform` field on each item.\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 `order_ids`, `states`, or `domain` for more\ntargeted results.", "method": "GET", "path": "/api/agency-hosting/v1/websites", "inputSchema": { "type": "object", "properties": { "page": { "type": "integer", "description": "Page number" }, "per_page": { "type": "integer", "description": "Number of items per page" }, "order_ids": { "type": "array", "description": "Filter by order IDs. Accepts a comma-separated list.", "items": { "type": "integer", "description": "order_ids parameter" } }, "states": { "type": "array", "description": "Filter by website state. Accepts a comma-separated list.", "items": { "type": "string", "description": "states parameter", "enum": [ "active", "locked", "suspended", "deleting", "deleted" ] } }, "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" ] } }, "domain": { "type": "string", "description": "Filter by domain name (case-insensitive substring match)" } }, "required": [] }, "security": [ { "apiToken": [] } ], "group": "agency-hosting" }, { "name": "agency-hosting_websites_list-processes", "title": "List website processes", "annotations": { "title": "List website processes", "readOnlyHint": true, "destructiveHint": false }, "description": "Lists active and recently completed asynchronous processes for an Agency Plan website.\n\nEach process has a unique ID (for tracking), a type, and a status (running, completed, failed).\nPoll this endpoint after initiating async operations (SSL setup, backups, cloning) to track progress.", "method": "GET", "path": "/api/agency-hosting/v1/websites/{website_uid}/processes", "inputSchema": { "type": "object", "properties": { "website_uid": { "type": "string", "description": "Agency Plan website UID" } }, "required": [ "website_uid" ] }, "security": [ { "apiToken": [] } ], "group": "agency-hosting" }, { "name": "agency-hosting_wordpress_change-version", "title": "Change WordPress version", "annotations": { "title": "Change WordPress version", "readOnlyHint": false, "destructiveHint": true, "idempotentHint": true }, "description": "Changes the installed WordPress core version on an Agency Plan website to one of the versions available for installation.", "method": "PATCH", "path": "/api/agency-hosting/v1/websites/{website_uid}/wordpress/settings/version", "inputSchema": { "type": "object", "properties": { "website_uid": { "type": "string", "description": "Agency Plan website UID" }, "version": { "type": "string", "description": "Target WordPress core version to install. Must be one of the available versions." } }, "required": [ "website_uid", "version" ] }, "security": [ { "apiToken": [] } ], "group": "agency-hosting" }, { "name": "agency-hosting_wordpress_settings", "title": "Get WordPress settings", "annotations": { "title": "Get WordPress settings", "readOnlyHint": true, "destructiveHint": false }, "description": "Returns the current WordPress settings for an Agency Plan website: installed core version,\nLiteSpeed Cache plugin status, object cache status, and maintenance mode status.", "method": "GET", "path": "/api/agency-hosting/v1/websites/{website_uid}/wordpress/settings", "inputSchema": { "type": "object", "properties": { "website_uid": { "type": "string", "description": "Agency Plan website UID" } }, "required": [ "website_uid" ] }, "security": [ { "apiToken": [] } ], "group": "agency-hosting" }, { "name": "agency-hosting_wordpress_list-versions", "title": "List available WordPress versions", "annotations": { "title": "List available WordPress versions", "readOnlyHint": true, "destructiveHint": false }, "description": "Lists the WordPress core versions available for installation on an Agency Plan website.", "method": "GET", "path": "/api/agency-hosting/v1/websites/{website_uid}/wordpress/settings/versions", "inputSchema": { "type": "object", "properties": { "website_uid": { "type": "string", "description": "Agency Plan website UID" } }, "required": [ "website_uid" ] }, "security": [ { "apiToken": [] } ], "group": "agency-hosting" }, { "name": "agent-readiness_checks_list", "title": "List checks", "annotations": { "title": "List checks", "readOnlyHint": true, "destructiveHint": false }, "description": "List every check an agent readiness scan runs, with its name, category and weight.\\n\nUse it to show the human-readable name of each `check_id` in a scan's results.", "method": "GET", "path": "/api/agent-readiness/v1/checks", "inputSchema": { "type": "object", "properties": {}, "required": [] }, "security": [ { "apiToken": [] } ], "group": "agent-readiness" }, { "name": "agent-readiness_scans_run", "title": "Run agent readiness scan", "annotations": { "title": "Run agent readiness scan", "readOnlyHint": false, "destructiveHint": false }, "description": "Start a scan of how ready a public website is for AI agents to discover, read and act on.\\n\nScanning is asynchronous: this operation only starts the scan, and the returned scan is usually `pending`\nwith no results yet. To get the results, poll the `Get agent readiness scan` operation with the same\ndomain every few seconds until its status is `completed` or `failed`. The scan itself is limited to 60 seconds,\nplus any time it waits in the queue. A `failed` scan is not retried; run this operation again.\\n\nStarting a scan for a domain that already has a pending scan from the last 5 minutes\nreturns that scan instead of starting a new one.", "method": "POST", "path": "/api/agent-readiness/v1/scans", "inputSchema": { "type": "object", "properties": { "domain": { "type": "string", "description": "Domain name or full URL of the website to scan. Only the host is used." } }, "required": [ "domain" ] }, "security": [ { "apiToken": [] } ], "group": "agent-readiness" }, { "name": "agent-readiness_scans_get", "title": "Get agent readiness scan", "annotations": { "title": "Get agent readiness scan", "readOnlyHint": true, "destructiveHint": false }, "description": "Get the latest agent readiness scan of a website.\\n\nScans started with the `Run agent readiness scan` operation are asynchronous. While the status is\n`pending`, the result fields are null; wait a few seconds and call this operation again until the status is\n`completed` or `failed`. A `failed` scan is not retried; run the scan again.\\n\nA completed scan has a 0-100 score, a letter grade, a score per category, and the result of every\ncheck with the evidence found and how to fix it. Check names are listed by the `List checks` operation.\\n\nReturns 404 when the domain has never been scanned; use the `Run agent readiness scan` operation first.", "method": "GET", "path": "/api/agent-readiness/v1/scans/{domain}", "inputSchema": { "type": "object", "properties": { "domain": { "type": "string", "description": "Domain name the scan was run for" } }, "required": [ "domain" ] }, "security": [ { "apiToken": [] } ], "group": "agent-readiness" }, { "name": "billing_catalog_list", "title": "Get catalog item list", "annotations": { "title": "Get catalog item list", "readOnlyHint": true, "destructiveHint": false }, "description": "Retrieve catalog items available for order.\n\nPrices in catalog items is displayed as cents (without floating point),\ne.g: float `17.99` is displayed as integer `1799`.\n\nUse this endpoint to view available services and pricing before placing orders.", "method": "GET", "path": "/api/billing/v1/catalog", "inputSchema": { "type": "object", "properties": { "category": { "type": "string", "description": "Filter catalog items by category", "enum": [ "DOMAIN", "VPS", "EMAIL", "HOSTING" ] }, "name": { "type": "string", "description": "Filter catalog items by name. Use `*` for wildcard search, e.g. `.COM*` to find .com domain" } }, "required": [] }, "security": [ { "apiToken": [] } ], "group": "billing" }, { "name": "billing_orders_create-purchase", "title": "Create purchase order", "annotations": { "title": "Create purchase order", "readOnlyHint": false, "destructiveHint": false }, "description": "Create a purchase order for any Hostinger product.\n\nThis unified endpoint places an order for one or more catalog items and\nworks across all Hostinger products, leveraging the existing billing\ninfrastructure. Use the [catalog endpoint](#tag/billing-catalog) to look\nup the `item_id` values available for purchase.\n\nIf no payment method is provided, your default payment method will be used automatically.\n\nIf the response is `202 Accepted`, the payment is still being processed and the order will\ncomplete asynchronously once the payment is confirmed.\n\nThis endpoint only places the order. Product-specific provisioning\n(e.g. VPS setup or domain registration) is not performed here — once the\norder completes, use the relevant product endpoints or\n[hPanel](https://hpanel.hostinger.com/) to finalize setup.\n\nUse this endpoint to purchase any product available in the catalog.", "method": "POST", "path": "/api/billing/v1/orders", "inputSchema": { "type": "object", "properties": { "payment_method_id": { "type": "integer", "description": "Payment method ID, default will be used if not provided" }, "items": { "type": "array", "description": "Catalog price items to purchase", "items": { "type": "object", "description": "items parameter", "properties": { "item_id": { "type": "string", "description": "Catalog price item ID" }, "quantity": { "type": "integer", "description": "Quantity to purchase" } }, "required": [ "item_id" ] } }, "coupons": { "type": "array", "description": "Discount coupon codes", "items": { "type": "string", "description": "coupons parameter" } } }, "required": [ "items" ] }, "security": [ { "apiToken": [] } ], "group": "billing" }, { "name": "billing_payment-methods_set-default", "title": "Set default payment method", "annotations": { "title": "Set default payment method", "readOnlyHint": false, "destructiveHint": false }, "description": "Set the default payment method for your account.\n\nUse this endpoint to configure the primary payment method for future orders.", "method": "POST", "path": "/api/billing/v1/payment-methods/{paymentMethodId}", "inputSchema": { "type": "object", "properties": { "paymentMethodId": { "type": "integer", "description": "Payment method ID" } }, "required": [ "paymentMethodId" ] }, "security": [ { "apiToken": [] } ], "group": "billing" }, { "name": "billing_payment-methods_delete", "title": "Delete payment method", "annotations": { "title": "Delete payment method", "readOnlyHint": false, "destructiveHint": true, "idempotentHint": true }, "description": "Delete a payment method from your account.\n\nUse this endpoint to remove unused payment methods from user accounts.", "method": "DELETE", "path": "/api/billing/v1/payment-methods/{paymentMethodId}", "inputSchema": { "type": "object", "properties": { "paymentMethodId": { "type": "integer", "description": "Payment method ID" } }, "required": [ "paymentMethodId" ] }, "security": [ { "apiToken": [] } ], "group": "billing" }, { "name": "billing_payment-methods_list", "title": "Get payment method list", "annotations": { "title": "Get payment method list", "readOnlyHint": true, "destructiveHint": false }, "description": "Retrieve available payment methods that can be used for placing new orders.\n\nIf you want to add new payment method,\nplease use [hPanel](https://hpanel.hostinger.com/billing/payment-methods).\n\nUse this endpoint to view available payment options before creating orders.", "method": "GET", "path": "/api/billing/v1/payment-methods", "inputSchema": { "type": "object", "properties": {}, "required": [] }, "security": [ { "apiToken": [] } ], "group": "billing" }, { "name": "billing_subscriptions_list", "title": "Get subscription list", "annotations": { "title": "Get subscription list", "readOnlyHint": true, "destructiveHint": false }, "description": "Retrieve a list of all subscriptions associated with your account.\n\nUse this endpoint to monitor active services and billing status.", "method": "GET", "path": "/api/billing/v1/subscriptions", "inputSchema": { "type": "object", "properties": {}, "required": [] }, "security": [ { "apiToken": [] } ], "group": "billing" }, { "name": "billing_subscriptions_disable-auto-renewal", "title": "Disable auto-renewal", "annotations": { "title": "Disable auto-renewal", "readOnlyHint": false, "destructiveHint": true, "idempotentHint": true }, "description": "Disable auto-renewal for a subscription.\n\nUse this endpoint when disable auto-renewal for a subscription.", "method": "DELETE", "path": "/api/billing/v1/subscriptions/{subscriptionId}/auto-renewal/disable", "inputSchema": { "type": "object", "properties": { "subscriptionId": { "type": "string", "description": "Subscription ID" } }, "required": [ "subscriptionId" ] }, "security": [ { "apiToken": [] } ], "group": "billing" }, { "name": "billing_subscriptions_enable-auto-renewal", "title": "Enable auto-renewal", "annotations": { "title": "Enable auto-renewal", "readOnlyHint": false, "destructiveHint": true, "idempotentHint": true }, "description": "Enable auto-renewal for a subscription.\n\nUse this endpoint when enable auto-renewal for a subscription.", "method": "PATCH", "path": "/api/billing/v1/subscriptions/{subscriptionId}/auto-renewal/enable", "inputSchema": { "type": "object", "properties": { "subscriptionId": { "type": "string", "description": "Subscription ID" } }, "required": [ "subscriptionId" ] }, "security": [ { "apiToken": [] } ], "group": "billing" }, { "name": "billing_subscriptions_renew", "title": "Renew subscription", "annotations": { "title": "Renew subscription", "readOnlyHint": false, "destructiveHint": false }, "description": "Create a renewal order for an existing Hostinger subscription.\n\nThis endpoint places a renewal order for a single subscription, leveraging\nthe existing billing infrastructure. Use the\n[subscriptions endpoint](#tag/billing-subscriptions) to look up the\n`subscriptionId` values available for renewal.\n\nIf no payment method is provided, your default payment method will be used automatically.\n\nIf the response is `202 Accepted`, the payment is still being processed and the renewal will\ncomplete asynchronously once the payment is confirmed.\n\nUse this endpoint to renew any subscription available in your account.", "method": "POST", "path": "/api/billing/v1/subscriptions/{subscriptionId}/renew", "inputSchema": { "type": "object", "properties": { "subscriptionId": { "type": "string", "description": "Subscription ID" }, "payment_method_id": { "type": "integer", "description": "Payment method ID, default will be used if not provided" }, "coupons": { "type": "array", "description": "Discount coupon codes", "items": { "type": "string", "description": "coupons parameter" } } }, "required": [ "subscriptionId" ] }, "security": [ { "apiToken": [] } ], "group": "billing" }, { "name": "dns_snapshots_get", "title": "Get DNS snapshot", "annotations": { "title": "Get DNS snapshot", "readOnlyHint": true, "destructiveHint": false }, "description": "Retrieve particular DNS snapshot with contents of DNS zone records.\n\nUse this endpoint to view historical DNS configurations for domains.", "method": "GET", "path": "/api/dns/v1/snapshots/{domain}/{snapshotId}", "inputSchema": { "type": "object", "properties": { "domain": { "type": "string", "description": "Domain name" }, "snapshotId": { "type": "integer", "description": "Snapshot ID" } }, "required": [ "domain", "snapshotId" ] }, "security": [ { "apiToken": [] } ], "group": "dns" }, { "name": "dns_snapshots_list", "title": "Get DNS snapshot list", "annotations": { "title": "Get DNS snapshot list", "readOnlyHint": true, "destructiveHint": false }, "description": "Retrieve DNS snapshots for a domain.\n\nUse this endpoint to view available DNS backup points for restoration.", "method": "GET", "path": "/api/dns/v1/snapshots/{domain}", "inputSchema": { "type": "object", "properties": { "domain": { "type": "string", "description": "Domain name" } }, "required": [ "domain" ] }, "security": [ { "apiToken": [] } ], "group": "dns" }, { "name": "dns_snapshots_restore", "title": "Restore DNS snapshot", "annotations": { "title": "Restore DNS snapshot", "readOnlyHint": false, "destructiveHint": true }, "description": "Restore DNS zone to the selected snapshot.\n\nUse this endpoint to revert domain DNS to a previous configuration.", "method": "POST", "path": "/api/dns/v1/snapshots/{domain}/{snapshotId}/restore", "inputSchema": { "type": "object", "properties": { "domain": { "type": "string", "description": "Domain name" }, "snapshotId": { "type": "integer", "description": "Snapshot ID" } }, "required": [ "domain", "snapshotId" ] }, "security": [ { "apiToken": [] } ], "group": "dns" }, { "name": "dns_records_list", "title": "Get DNS records", "annotations": { "title": "Get DNS records", "readOnlyHint": true, "destructiveHint": false }, "description": "Retrieve DNS zone records for a specific domain.\n\nUse this endpoint to view current DNS configuration for domain management.", "method": "GET", "path": "/api/dns/v1/zones/{domain}", "inputSchema": { "type": "object", "properties": { "domain": { "type": "string", "description": "Domain name" } }, "required": [ "domain" ] }, "security": [ { "apiToken": [] } ], "group": "dns" }, { "name": "dns_records_update", "title": "Update DNS records", "annotations": { "title": "Update DNS records", "readOnlyHint": false, "destructiveHint": true, "idempotentHint": true }, "description": "Update DNS records for the selected domain.\n\nUsing `overwrite = true` will replace existing records with the provided ones. \nOtherwise existing records will be updated and new records will be added.\n\nUse this endpoint to modify domain DNS configuration.", "method": "PUT", "path": "/api/dns/v1/zones/{domain}", "inputSchema": { "type": "object", "properties": { "domain": { "type": "string", "description": "Domain name" }, "overwrite": { "type": "boolean", "description": "If `true`, resource records (RRs) matching name and type will be deleted and new RRs will be created,\notherwise resource records' ttl's are updated and new records are appended.\nIf no matching RRs are found, they are created." }, "zone": { "type": "array", "description": "zone parameter", "items": { "type": "object", "description": "zone parameter", "properties": { "name": { "type": "string", "description": "Name of the record (use `@` for wildcard name)" }, "records": { "type": "array", "description": "Records assigned to the name", "items": { "type": "object", "description": "records parameter", "properties": { "content": { "type": "string", "description": "Content of the name record" } }, "required": [ "content" ] } }, "ttl": { "type": "integer", "description": "TTL (Time-To-Live) of the record" }, "type": { "type": "string", "description": "Type of the record", "enum": [ "A", "AAAA", "CNAME", "ALIAS", "MX", "TXT", "NS", "SOA", "SRV", "CAA" ] } }, "required": [ "name", "records", "type" ] } } }, "required": [ "domain", "zone" ] }, "security": [ { "apiToken": [] } ], "group": "dns" }, { "name": "dns_records_delete", "title": "Delete DNS records", "annotations": { "title": "Delete DNS records", "readOnlyHint": false, "destructiveHint": true, "idempotentHint": true }, "description": "Delete DNS records for the selected domain.\n\nTo filter which records to delete, add the `name` of the record and `type` to the filter. \nMultiple filters can be provided with single request.\n\nIf you have multiple records with the same name and type, and you want to delete only part of them,\nrefer to the `Update zone records` endpoint.\n\nUse this endpoint to remove specific DNS records from domains.", "method": "DELETE", "path": "/api/dns/v1/zones/{domain}", "inputSchema": { "type": "object", "properties": { "domain": { "type": "string", "description": "Domain name" } }, "required": [ "domain" ] }, "security": [ { "apiToken": [] } ], "group": "dns" }, { "name": "dns_records_reset", "title": "Reset DNS records", "annotations": { "title": "Reset DNS records", "readOnlyHint": false, "destructiveHint": true }, "description": "Reset DNS zone to the default records.\n\nUse this endpoint to restore domain DNS to original configuration.", "method": "POST", "path": "/api/dns/v1/zones/{domain}/reset", "inputSchema": { "type": "object", "properties": { "domain": { "type": "string", "description": "Domain name" }, "sync": { "type": "boolean", "description": "Determines if operation should be run synchronously" }, "reset_email_records": { "type": "boolean", "description": "Determines if email records should be reset" }, "whitelisted_record_types": { "type": "array", "description": "Specifies which record types to not reset", "items": { "type": "string", "description": "whitelisted_record_types parameter" } } }, "required": [ "domain" ] }, "security": [ { "apiToken": [] } ], "group": "dns" }, { "name": "dns_records_validate", "title": "Validate DNS records", "annotations": { "title": "Validate DNS records", "readOnlyHint": true, "destructiveHint": false }, "description": "Validate DNS records prior to update for the selected domain.\n\nIf the validation is successful, the response will contain `200 Success` code.\nIf there is validation error, the response will fail with `422 Validation error` code.\n\nUse this endpoint to verify DNS record validity before applying changes.", "method": "POST", "path": "/api/dns/v1/zones/{domain}/validate", "inputSchema": { "type": "object", "properties": { "domain": { "type": "string", "description": "Domain name" }, "overwrite": { "type": "boolean", "description": "If `true`, resource records (RRs) matching name and type will be deleted and new RRs will be created,\notherwise resource records' ttl's are updated and new records are appended.\nIf no matching RRs are found, they are created." }, "zone": { "type": "array", "description": "zone parameter", "items": { "type": "object", "description": "zone parameter", "properties": { "name": { "type": "string", "description": "Name of the record (use `@` for wildcard name)" }, "records": { "type": "array", "description": "Records assigned to the name", "items": { "type": "object", "description": "records parameter", "properties": { "content": { "type": "string", "description": "Content of the name record" } }, "required": [ "content" ] } }, "ttl": { "type": "integer", "description": "TTL (Time-To-Live) of the record" }, "type": { "type": "string", "description": "Type of the record", "enum": [ "A", "AAAA", "CNAME", "ALIAS", "MX", "TXT", "NS", "SOA", "SRV", "CAA" ] } }, "required": [ "name", "records", "type" ] } } }, "required": [ "domain", "zone" ] }, "security": [ { "apiToken": [] } ], "group": "dns" }, { "name": "domains_verifications_direct", "title": "Get domain verifications", "annotations": { "title": "Get domain verifications", "readOnlyHint": true, "destructiveHint": false }, "description": "Retrieve a list of pending and completed domain verifications.", "method": "GET", "path": "/api/v2/direct/verifications/active", "inputSchema": { "type": "object", "properties": {}, "required": [] }, "security": [ { "apiToken": [] } ], "group": "domains" }, { "name": "domains_availability_suggest-names-from-description", "title": "Suggest domain names from a description", "annotations": { "title": "Suggest domain names from a description", "readOnlyHint": true, "destructiveHint": false }, "description": "Suggest available domain names based on a free-text description of your project.\n\nSuggestions are generated by an AI model, so they differ between calls.\n\nEndpoint has rate limit of 90 requests per minute.\n\nUse this endpoint to find a domain name when you only know what the website is about.", "method": "POST", "path": "/api/domains/v1/availability/alternatives-from-description", "inputSchema": { "type": "object", "properties": { "description": { "type": "string", "description": "Free-text description of the project the domain is needed for" }, "limit": { "type": "integer", "description": "Amount of domain names to suggest" } }, "required": [ "description", "limit" ] }, "security": [ { "apiToken": [] } ], "group": "domains" }, { "name": "domains_availability_suggest-names-from", "title": "Suggest domain names from a domain", "annotations": { "title": "Suggest domain names from a domain", "readOnlyHint": true, "destructiveHint": false }, "description": "Suggest available domain names based on a domain name you already have in mind.\n\nSuggestions are generated by an AI model, so they differ between calls.\n\nEndpoint has rate limit of 90 requests per minute.\n\nUse this endpoint when the domain you wanted is taken and you need close alternatives.", "method": "POST", "path": "/api/domains/v1/availability/alternatives-from-domain", "inputSchema": { "type": "object", "properties": { "domain": { "type": "string", "description": "Domain name to base the suggestions on" }, "limit": { "type": "integer", "description": "Amount of domain names to suggest" } }, "required": [ "domain", "limit" ] }, "security": [ { "apiToken": [] } ], "group": "domains" }, { "name": "domains_availability_check", "title": "Check domain availability", "annotations": { "title": "Check domain availability", "readOnlyHint": true, "destructiveHint": false }, "description": "Check availability of domain names across multiple TLDs.\n\nMultiple TLDs can be checked at once.\nIf you want alternative domains with response, provide only one TLD and set `with_alternatives` to `true`.\nTLDs should be provided without leading dot (e.g. `com`, `net`, `org`).\n\nEndpoint has rate limit of 90 requests per minute.\n\nUse this endpoint to verify domain availability before purchase.", "method": "POST", "path": "/api/domains/v1/availability", "inputSchema": { "type": "object", "properties": { "domain": { "type": "string", "description": "Domain name (without TLD)" }, "tlds": { "type": "array", "description": "TLDs list", "items": { "type": "string", "description": "TLD without leading dot" } }, "with_alternatives": { "type": "boolean", "description": "Should response include alternatives" } }, "required": [ "domain", "tlds" ] }, "security": [ { "apiToken": [] } ], "group": "domains" }, { "name": "domains_forwarding_get", "title": "Get domain forwarding", "annotations": { "title": "Get domain forwarding", "readOnlyHint": true, "destructiveHint": false }, "description": "Retrieve domain forwarding data.\n\nUse this endpoint to view current redirect configuration for domains.", "method": "GET", "path": "/api/domains/v1/forwarding/{domain}", "inputSchema": { "type": "object", "properties": { "domain": { "type": "string", "description": "Domain name" } }, "required": [ "domain" ] }, "security": [ { "apiToken": [] } ], "group": "domains" }, { "name": "domains_forwarding_update", "title": "Update domain forwarding", "annotations": { "title": "Update domain forwarding", "readOnlyHint": false, "destructiveHint": true, "idempotentHint": true }, "description": "Update domain forwarding configuration.\n\nUse this endpoint to modify existing redirect configuration for domains.", "method": "PUT", "path": "/api/domains/v1/forwarding/{domain}", "inputSchema": { "type": "object", "properties": { "domain": { "type": "string", "description": "Domain name" }, "redirect_type": { "type": "string", "description": "Redirect type", "enum": [ "301", "302" ] }, "redirect_url": { "type": "string", "description": "URL to forward domain to" } }, "required": [ "domain", "redirect_type", "redirect_url" ] }, "security": [ { "apiToken": [] } ], "group": "domains" }, { "name": "domains_forwarding_delete", "title": "Delete domain forwarding", "annotations": { "title": "Delete domain forwarding", "readOnlyHint": false, "destructiveHint": true, "idempotentHint": true }, "description": "Delete domain forwarding data.\n\nUse this endpoint to remove redirect configuration from domains.", "method": "DELETE", "path": "/api/domains/v1/forwarding/{domain}", "inputSchema": { "type": "object", "properties": { "domain": { "type": "string", "description": "Domain name" } }, "required": [ "domain" ] }, "security": [ { "apiToken": [] } ], "group": "domains" }, { "name": "domains_forwarding_create", "title": "Create domain forwarding", "annotations": { "title": "Create domain forwarding", "readOnlyHint": false, "destructiveHint": false }, "description": "Create domain forwarding configuration.\n\nUse this endpoint to set up domain redirects to other URLs.", "method": "POST", "path": "/api/domains/v1/forwarding", "inputSchema": { "type": "object", "properties": { "domain": { "type": "string", "description": "Domain name" }, "redirect_type": { "type": "string", "description": "Redirect type", "enum": [ "301", "302" ] }, "redirect_url": { "type": "string", "description": "URL to forward domain to" } }, "required": [ "domain", "redirect_type", "redirect_url" ] }, "security": [ { "apiToken": [] } ], "group": "domains" }, { "name": "domains_whois_pending-irtp-verification", "title": "Get pending IRTP verification", "annotations": { "title": "Get pending IRTP verification", "readOnlyHint": true, "destructiveHint": false }, "description": "Retrieve a pending IRTP verification for a domain.\n\nBoth the old and new registrant must confirm it before the WHOIS change takes effect.\n\nUse this endpoint to check the status of a WHOIS change awaiting registrant confirmation.", "method": "GET", "path": "/api/domains/v1/irtp/{domain}", "inputSchema": { "type": "object", "properties": { "domain": { "type": "string", "description": "Domain name" } }, "required": [ "domain" ] }, "security": [ { "apiToken": [] } ], "group": "domains" }, { "name": "domains_whois_cancel-pending-irtp-verification", "title": "Cancel pending IRTP verification", "annotations": { "title": "Cancel pending IRTP verification", "readOnlyHint": false, "destructiveHint": true, "idempotentHint": true }, "description": "Cancel a pending IRTP verification.\n\nUse this endpoint to back out of a WHOIS change that is stuck waiting on registrant confirmation,\nfor example when the confirmation email cannot be received, without waiting out the 5-day expiry.", "method": "DELETE", "path": "/api/domains/v1/irtp/{domain}", "inputSchema": { "type": "object", "properties": { "domain": { "type": "string", "description": "Domain name" } }, "required": [ "domain" ] }, "security": [ { "apiToken": [] } ], "group": "domains" }, { "name": "domains_move_incoming", "title": "Get incoming domain move", "annotations": { "title": "Get incoming domain move", "readOnlyHint": true, "destructiveHint": false }, "description": "Retrieve the incoming move for a specified domain.\n\nReturns 404 when no account is moving this domain to you.\n\nUse this endpoint to check whether a domain addressed to you is still waiting to be accepted.", "method": "GET", "path": "/api/domains/v1/move/incoming/{domain}", "inputSchema": { "type": "object", "properties": { "domain": { "type": "string", "description": "Domain name" }, "force_sync": { "type": "boolean", "description": "Re-check the move against the registry before responding. Only has an effect while the move is in the `activating` status." } }, "required": [ "domain" ] }, "security": [ { "apiToken": [] } ], "group": "domains" }, { "name": "domains_move_accept-incoming", "title": "Accept incoming domain move", "annotations": { "title": "Accept incoming domain move", "readOnlyHint": false, "destructiveHint": true, "idempotentHint": true }, "description": "Accept an incoming move for a specified domain.\n\nThe provided WHOIS profiles become the contacts of the domain, so they must belong\nto your account and satisfy the requirements of the TLD. Only the contact types the\ndomain actually uses are applied, but all four profile IDs have to be provided.\n\nThe move has to still be waiting for your decision, already accepted moves\ncannot be accepted again.\n\nAccepting does not complete the move. A confirmation email is sent to the email address of\nthe new owner contact, and the domain changes hands only after the change is confirmed from it.\nUntil then the move stays in the `activating` status, which can be followed with the\n[incoming move endpoint](#tag/domains-move).\n\nUse this endpoint to take ownership of a domain offered to you.", "method": "PUT", "path": "/api/domains/v1/move/incoming/{domain}", "inputSchema": { "type": "object", "properties": { "domain": { "type": "string", "description": "Domain name" }, "domain_contacts": { "type": "object", "description": "WHOIS profiles of the accepting account. Only the contact types required by the TLD are applied, but all four IDs must be provided.", "properties": { "owner_id": { "type": "integer", "description": "Owner contact WHOIS record ID" }, "admin_id": { "type": "integer", "description": "Administrative contact WHOIS record ID" }, "billing_id": { "type": "integer", "description": "Billing contact WHOIS record ID" }, "tech_id": { "type": "integer", "description": "Technical contact WHOIS record ID" } }, "required": [ "owner_id", "admin_id", "billing_id", "tech_id" ] } }, "required": [ "domain", "domain_contacts" ] }, "security": [ { "apiToken": [] } ], "group": "domains" }, { "name": "domains_move_reject-incoming", "title": "Reject incoming domain move", "annotations": { "title": "Reject incoming domain move", "readOnlyHint": false, "destructiveHint": true, "idempotentHint": true }, "description": "Reject an incoming move for a specified domain.\n\nThe domain stays in the account which initiated the move.\nMoves you have already accepted cannot be rejected anymore.\n\nUse this endpoint to decline a domain you do not want to take over.", "method": "DELETE", "path": "/api/domains/v1/move/incoming/{domain}", "inputSchema": { "type": "object", "properties": { "domain": { "type": "string", "description": "Domain name" } }, "required": [ "domain" ] }, "security": [ { "apiToken": [] } ], "group": "domains" }, { "name": "domains_move_incoming-list", "title": "Get incoming domain move list", "annotations": { "title": "Get incoming domain move list", "readOnlyHint": true, "destructiveHint": false }, "description": "Retrieve all domains other Hostinger accounts are moving to your account.\n\nMoves of every status are returned, including the ones which already completed.\n\nUse this endpoint to find domains waiting for you to accept them.", "method": "GET", "path": "/api/domains/v1/move/incoming", "inputSchema": { "type": "object", "properties": {}, "required": [] }, "security": [ { "apiToken": [] } ], "group": "domains" }, { "name": "domains_move_outgoing", "title": "Get outgoing domain move", "annotations": { "title": "Get outgoing domain move", "readOnlyHint": true, "destructiveHint": false }, "description": "Retrieve the outgoing move for a specified domain.\n\nReturns 404 when the domain has no move in progress.\n\nUse this endpoint to track the status of a move you have initiated for a single domain.", "method": "GET", "path": "/api/domains/v1/move/outgoing/{domain}", "inputSchema": { "type": "object", "properties": { "domain": { "type": "string", "description": "Domain name" } }, "required": [ "domain" ] }, "security": [ { "apiToken": [] } ], "group": "domains" }, { "name": "domains_move_start-outgoing", "title": "Start outgoing domain move", "annotations": { "title": "Start outgoing domain move", "readOnlyHint": false, "destructiveHint": false }, "description": "Initiate a move of a specified domain to another Hostinger account.\n\nThe receiving account has to already exist and accept the move before the domain changes hands.\n\nThe domain must be active. The subscription it belongs to is resolved automatically,\nand the request is rejected with a 404 status code when the domain has no domain\nsubscription of its own.\n\nDomains protected by premium protection require an additional verification step,\nsuch requests are rejected with a 428 status code.\n\nUse this endpoint to hand a domain over to another Hostinger user.", "method": "POST", "path": "/api/domains/v1/move/outgoing/{domain}", "inputSchema": { "type": "object", "properties": { "domain": { "type": "string", "description": "Domain name" }, "new_customer_email": { "type": "string", "description": "Email address of the Hostinger account receiving the domain" } }, "required": [ "domain", "new_customer_email" ] }, "security": [ { "apiToken": [] } ], "group": "domains" }, { "name": "domains_move_cancel-outgoing", "title": "Cancel outgoing domain move", "annotations": { "title": "Cancel outgoing domain move", "readOnlyHint": false, "destructiveHint": true, "idempotentHint": true }, "description": "Cancel an outgoing move for a specified domain.\n\nThe move can only be cancelled while the receiving account has not accepted it yet.\nThe domain stays in your account.\n\nUse this endpoint to withdraw a move you no longer want to complete.", "method": "DELETE", "path": "/api/domains/v1/move/outgoing/{domain}", "inputSchema": { "type": "object", "properties": { "domain": { "type": "string", "description": "Domain name" } }, "required": [ "domain" ] }, "security": [ { "apiToken": [] } ], "group": "domains" }, { "name": "domains_move_outgoing-list", "title": "Get outgoing domain move list", "annotations": { "title": "Get outgoing domain move list", "readOnlyHint": true, "destructiveHint": false }, "description": "Retrieve all domains you are moving to other Hostinger accounts.\n\nOnly moves which have not completed yet are returned.\n\nUse this endpoint to track moves you have initiated and the accounts they are addressed to.", "method": "GET", "path": "/api/domains/v1/move/outgoing", "inputSchema": { "type": "object", "properties": {}, "required": [] }, "security": [ { "apiToken": [] } ], "group": "domains" }, { "name": "domains_portfolio_authorization-code", "title": "Get domain authorization code", "annotations": { "title": "Get domain authorization code", "readOnlyHint": true, "destructiveHint": false }, "description": "Retrieve the authorization (EPP) code for a specified domain so it can be transferred\naway from Hostinger to another registrar.\n\nRequesting a new code invalidates any code retrieved previously.\n\nUse this endpoint to obtain the code required to transfer a domain to another registrar.", "method": "GET", "path": "/api/domains/v1/portfolio/{domain}/auth-code", "inputSchema": { "type": "object", "properties": { "domain": { "type": "string", "description": "Domain name" } }, "required": [ "domain" ] }, "security": [ { "apiToken": [] } ], "group": "domains" }, { "name": "domains_portfolio_claim-free", "title": "Claim free domain", "annotations": { "title": "Claim free domain", "readOnlyHint": false, "destructiveHint": false }, "description": "Claim a free domain available on your account and register it.\n\nUnlike purchasing a domain, this consumes a free domain you already have,\nso no payment method is required.\n\nA successful response means the domain is registered. If registration fails, login to\n[hPanel](https://hpanel.hostinger.com/) and check domain registration status.\n\nIf no WHOIS information is provided, default contact information for that TLD will be used.\nBefore making request, ensure WHOIS information for desired TLD exists in your account.\n\nSome TLDs require `additional_details` to be provided and these will be validated before claiming.\n\nRequests which cannot be fulfilled are rejected with an error code in the response body,\nfor example `2037` when no free domain is available.\n\nUse this endpoint to register a domain using a free domain from your account.", "method": "POST", "path": "/api/domains/v1/portfolio/claim", "inputSchema": { "type": "object", "properties": { "domain": { "type": "string", "description": "Domain name" }, "domain_contacts": { "type": "object", "description": "Domain contact information", "properties": { "owner_id": { "type": "integer", "description": "Owner contact WHOIS record ID" }, "admin_id": { "type": "integer", "description": "Administrative contact WHOIS record ID" }, "billing_id": { "type": "integer", "description": "Billing contact WHOIS record ID" }, "tech_id": { "type": "integer", "description": "Technical contact WHOIS record ID" } } }, "additional_details": { "type": "object", "description": "Additional registration data, possible values depends on TLD", "properties": {} } }, "required": [ "domain" ] }, "security": [ { "apiToken": [] } ], "group": "domains" }, { "name": "domains_portfolio_enable-lock", "title": "Enable domain lock", "annotations": { "title": "Enable domain lock", "readOnlyHint": false, "destructiveHint": true, "idempotentHint": true }, "description": "Enable domain lock for the domain.\n\nWhen domain lock is enabled,\nthe domain cannot be transferred to another registrar without first disabling the lock.\n\nUse this endpoint to secure domains against unauthorized transfers.", "method": "PUT", "path": "/api/domains/v1/portfolio/{domain}/domain-lock", "inputSchema": { "type": "object", "properties": { "domain": { "type": "string", "description": "Domain name" } }, "required": [ "domain" ] }, "security": [ { "apiToken": [] } ], "group": "domains" }, { "name": "domains_portfolio_disable-lock", "title": "Disable domain lock", "annotations": { "title": "Disable domain lock", "readOnlyHint": false, "destructiveHint": true, "idempotentHint": true }, "description": "Disable domain lock for the domain.\n\nDomain lock needs to be disabled before transferring the domain to another registrar.\n\nUse this endpoint to prepare domains for transfer to other registrars.", "method": "DELETE", "path": "/api/domains/v1/portfolio/{domain}/domain-lock", "inputSchema": { "type": "object", "properties": { "domain": { "type": "string", "description": "Domain name" } }, "required": [ "domain" ] }, "security": [ { "apiToken": [] } ], "group": "domains" }, { "name": "domains_portfolio_get", "title": "Get domain details", "annotations": { "title": "Get domain details", "readOnlyHint": true, "destructiveHint": false }, "description": "Retrieve detailed information for specified domain.\n\nUse this endpoint to view comprehensive domain configuration and status.", "method": "GET", "path": "/api/domains/v1/portfolio/{domain}", "inputSchema": { "type": "object", "properties": { "domain": { "type": "string", "description": "Domain name" } }, "required": [ "domain" ] }, "security": [ { "apiToken": [] } ], "group": "domains" }, { "name": "domains_portfolio_list", "title": "Get domain list", "annotations": { "title": "Get domain list", "readOnlyHint": true, "destructiveHint": false }, "description": "Retrieve all domains associated with your account.\n\nUse this endpoint to view user's domain portfolio.", "method": "GET", "path": "/api/domains/v1/portfolio", "inputSchema": { "type": "object", "properties": {}, "required": [] }, "security": [ { "apiToken": [] } ], "group": "domains" }, { "name": "domains_portfolio_purchase", "title": "Purchase new domain", "annotations": { "title": "Purchase new domain", "readOnlyHint": false, "destructiveHint": false }, "description": "Purchase and register a new domain name.\n\nIf registration fails, login to [hPanel](https://hpanel.hostinger.com/) and check domain registration status.\n\nIf no payment method is provided, your default payment method will be used automatically.\n\nIf the response is `202 Accepted`, the payment is still being processed and the domain was\n**not** registered. Once the order completes, register the domain from\n[hPanel](https://hpanel.hostinger.com/).\n\nIf no WHOIS information is provided, default contact information for that TLD will be used.\nBefore making request, ensure WHOIS information for desired TLD exists in your account.\n\nSome TLDs require `additional_details` to be provided and these will be validated before completing purchase.\n\nUse this endpoint to register new domains for users.", "method": "POST", "path": "/api/domains/v1/portfolio", "inputSchema": { "type": "object", "properties": { "domain": { "type": "string", "description": "Domain name" }, "item_id": { "type": "string", "description": "Catalog price item ID" }, "payment_method_id": { "type": "integer", "description": "Payment method ID, default will be used if not provided" }, "domain_contacts": { "type": "object", "description": "Domain contact information", "properties": { "owner_id": { "type": "integer", "description": "Owner contact WHOIS record ID" }, "admin_id": { "type": "integer", "description": "Administrative contact WHOIS record ID" }, "billing_id": { "type": "integer", "description": "Billing contact WHOIS record ID" }, "tech_id": { "type": "integer", "description": "Technical contact WHOIS record ID" } } }, "additional_details": { "type": "object", "description": "Additional registration data, possible values depends on TLD", "properties": {} }, "coupons": { "type": "array", "description": "Discount coupon codes", "items": { "type": "string", "description": "coupons parameter" } } }, "required": [ "domain", "item_id" ] }, "security": [ { "apiToken": [] } ], "group": "domains" }, { "name": "domains_portfolio_enable-privacy-protection", "title": "Enable privacy protection", "annotations": { "title": "Enable privacy protection", "readOnlyHint": false, "destructiveHint": true, "idempotentHint": true }, "description": "Enable privacy protection for the domain.\n\nWhen privacy protection is enabled, domain owner's personal information is hidden from public WHOIS database.\n\nUse this endpoint to protect domain owner's personal information from public view.", "method": "PUT", "path": "/api/domains/v1/portfolio/{domain}/privacy-protection", "inputSchema": { "type": "object", "properties": { "domain": { "type": "string", "description": "Domain name" } }, "required": [ "domain" ] }, "security": [ { "apiToken": [] } ], "group": "domains" }, { "name": "domains_portfolio_disable-privacy-protection", "title": "Disable privacy protection", "annotations": { "title": "Disable privacy protection", "readOnlyHint": false, "destructiveHint": true, "idempotentHint": true }, "description": "Disable privacy protection for the domain.\n\nWhen privacy protection is disabled, domain owner's personal information is visible in public WHOIS database.\n\nUse this endpoint to make domain owner's information publicly visible.", "method": "DELETE", "path": "/api/domains/v1/portfolio/{domain}/privacy-protection", "inputSchema": { "type": "object", "properties": { "domain": { "type": "string", "description": "Domain name" } }, "required": [ "domain" ] }, "security": [ { "apiToken": [] } ], "group": "domains" }, { "name": "domains_portfolio_renewal-information", "title": "Get domain renewal information", "annotations": { "title": "Get domain renewal information", "readOnlyHint": true, "destructiveHint": false }, "description": "Retrieve renewal information for a specified domain, including its status and current\nexpiration date.\n\nUse this endpoint to build renewal automation and expiry monitoring for a single domain.", "method": "GET", "path": "/api/domains/v1/portfolio/{domain}/renewal", "inputSchema": { "type": "object", "properties": { "domain": { "type": "string", "description": "Domain name" } }, "required": [ "domain" ] }, "security": [ { "apiToken": [] } ], "group": "domains" }, { "name": "domains_portfolio_complete-setup", "title": "Complete domain setup", "annotations": { "title": "Complete domain setup", "readOnlyHint": false, "destructiveHint": false }, "description": "Register a domain you have already paid for but which has not been set up yet.\n\nUse this endpoint when an order completed without registering the domain, for example when\n`Purchase new domain` returned `202 Accepted` and the domain was added to your account without\nbeing registered, or when an earlier setup attempt failed. No new order is placed and no payment\nis taken: the subscription you already own is used, for the period you already paid for.\n\nA domain is left awaiting setup when the details needed to register it were missing or invalid\nas the order completed. Domains ordered elsewhere can be awaiting setup for the same reason.\nComplete the missing information, then call this endpoint. If the order itself has not completed\nyet, the domain is not on your account, wait until it appears in `Get domain list`.\n\nIf `domain_contacts` is omitted, the default WHOIS profile of that TLD is used for all four\nroles. The profile must exist and be complete for the TLD, an incomplete profile is the most\ncommon reason a domain is left awaiting setup. Create one with `Create WHOIS profile`.\n\nSome TLDs require `additional_details`. These are validated before setup, so a missing or\ninvalid value is rejected without any registration being attempted.\n\nThe domain is set up with the default nameservers and without privacy protection. Use\n`Update domain nameservers` and `Enable privacy protection` afterwards to change either.\n\nA successful response means the setup request was accepted, not that the domain is already\nregistered. Poll `Get domain list` for the outcome, the domain appears in `Get domain details`\nonly once it is registered.\n\nUse this endpoint to finish registering a domain that is awaiting setup on your account.", "method": "POST", "path": "/api/domains/v1/portfolio/{domain}/setup", "inputSchema": { "type": "object", "properties": { "domain": { "type": "string", "description": "Domain name" }, "domain_contacts": { "type": "object", "description": "Domain contact information", "properties": { "owner_id": { "type": "integer", "description": "Owner contact WHOIS record ID" }, "admin_id": { "type": "integer", "description": "Administrative contact WHOIS record ID" }, "billing_id": { "type": "integer", "description": "Billing contact WHOIS record ID" }, "tech_id": { "type": "integer", "description": "Technical contact WHOIS record ID" } } }, "additional_details": { "type": "object", "description": "Additional registration data, possible values depends on TLD", "properties": {} } }, "required": [ "domain" ] }, "security": [ { "apiToken": [] } ], "group": "domains" }, { "name": "domains_portfolio_update-nameservers", "title": "Update domain nameservers", "annotations": { "title": "Update domain nameservers", "readOnlyHint": false, "destructiveHint": true, "idempotentHint": true }, "description": "Set nameservers for a specified domain.\n\nBe aware, that improper nameserver configuration can lead to the domain being unresolvable or unavailable.\n\nUse this endpoint to configure custom DNS hosting for domains.", "method": "PUT", "path": "/api/domains/v1/portfolio/{domain}/nameservers", "inputSchema": { "type": "object", "properties": { "domain": { "type": "string", "description": "Domain name" }, "ns1": { "type": "string", "description": "First name server" }, "ns2": { "type": "string", "description": "Second name server" }, "ns3": { "type": "string", "description": "Third name server" }, "ns4": { "type": "string", "description": "Fourth name server" } }, "required": [ "domain", "ns1", "ns2" ] }, "security": [ { "apiToken": [] } ], "group": "domains" }, { "name": "domains_transfer_claim-free", "title": "Claim free domain transfer", "annotations": { "title": "Claim free domain transfer", "readOnlyHint": false, "destructiveHint": false }, "description": "Claim a free domain transfer available on your account and start the transfer.\n\nUnlike purchasing a transfer, this consumes a free domain transfer you already have,\nso no payment method is required.\n\nBefore making request, unlock the domain at the current registrar and get its authorization\ncode. The transfer is validated first, so domains which cannot be transferred are rejected\nbefore the free domain transfer is consumed.\n\nA successful response means the transfer has been started. Completion depends on the current\nregistrar and can be followed with the [transfer list endpoint](#tag/domains-transfer).\n\nIf no WHOIS information is provided, default contact information for that TLD will be used.\nBefore making request, ensure WHOIS information for desired TLD exists in your account.\n\nRequests which cannot be fulfilled are rejected with an error code in the response body.\n\nUse this endpoint to transfer a domain using a free domain transfer from your account.", "method": "POST", "path": "/api/domains/v1/transfers/claim", "inputSchema": { "type": "object", "properties": { "domain": { "type": "string", "description": "Domain name" }, "auth_code": { "type": "string", "description": "Authorization code from the current registrar" }, "domain_contacts": { "type": "object", "description": "Domain contact information", "properties": { "owner_id": { "type": "integer", "description": "Owner contact WHOIS record ID" }, "admin_id": { "type": "integer", "description": "Administrative contact WHOIS record ID" }, "billing_id": { "type": "integer", "description": "Billing contact WHOIS record ID" }, "tech_id": { "type": "integer", "description": "Technical contact WHOIS record ID" } } }, "should_keep_ns": { "type": "boolean", "description": "Keep the existing nameservers of the domain" } }, "required": [ "domain", "auth_code" ] }, "security": [ { "apiToken": [] } ], "group": "domains" }, { "name": "domains_transfer_get", "title": "Get transfer", "annotations": { "title": "Get transfer", "readOnlyHint": true, "destructiveHint": false }, "description": "Retrieve the transfer for a specified domain.\n\nUse this endpoint to track an incoming or outgoing registrar transfer and its status.", "method": "GET", "path": "/api/domains/v1/transfers/{domain}", "inputSchema": { "type": "object", "properties": { "domain": { "type": "string", "description": "Domain name" } }, "required": [ "domain" ] }, "security": [ { "apiToken": [] } ], "group": "domains" }, { "name": "domains_transfer_list", "title": "Get transfer list", "annotations": { "title": "Get transfer list", "readOnlyHint": true, "destructiveHint": false }, "description": "Retrieve all domain transfers in your portfolio.\n\nUse this endpoint to monitor incoming and outgoing registrar transfers across your domains.", "method": "GET", "path": "/api/domains/v1/transfers", "inputSchema": { "type": "object", "properties": {}, "required": [] }, "security": [ { "apiToken": [] } ], "group": "domains" }, { "name": "domains_transfer_start", "title": "Start domain transfer", "annotations": { "title": "Start domain transfer", "readOnlyHint": false, "destructiveHint": false }, "description": "Transfer a domain from another registrar to your account.\n\nThe transfer runs on a domain transfer service you have already purchased.\n\nBefore making request, unlock the domain at the current registrar and get its authorization\ncode.\n\nA successful response means the transfer has been started. Completion depends on the current\nregistrar and can be followed with the [transfer list endpoint](#tag/domains-transfer).\n\nIf no WHOIS information is provided, default contact information for that TLD will be used.\nBefore making request, ensure WHOIS information for desired TLD exists in your account.\n\nUse this endpoint to bring domains registered elsewhere into your account.", "method": "POST", "path": "/api/domains/v1/transfers", "inputSchema": { "type": "object", "properties": { "domain": { "type": "string", "description": "Domain name" }, "auth_code": { "type": "string", "description": "Authorization code from the current registrar" }, "domain_contacts": { "type": "object", "description": "Domain contact information", "properties": { "owner_id": { "type": "integer", "description": "Owner contact WHOIS record ID" }, "admin_id": { "type": "integer", "description": "Administrative contact WHOIS record ID" }, "billing_id": { "type": "integer", "description": "Billing contact WHOIS record ID" }, "tech_id": { "type": "integer", "description": "Technical contact WHOIS record ID" } } }, "should_keep_ns": { "type": "boolean", "description": "Keep the existing nameservers of the domain" } }, "required": [ "domain", "auth_code" ] }, "security": [ { "apiToken": [] } ], "group": "domains" }, { "name": "domains_whois_change-for", "title": "Change WHOIS profile for domain", "annotations": { "title": "Change WHOIS profile for domain", "readOnlyHint": false, "destructiveHint": true, "idempotentHint": true }, "description": "Change WHOIS contact profile for a domain.\n\nRepoints the given contact roles to a new WHOIS profile and submits the change to the registry.\nThe profile currently assigned to those roles is resolved automatically;\nthe request fails if the given roles are not all on the same profile today.\n\nChanging transfer sensitive fields on the owner contact starts an IRTP verification.\n\nThe change is processed asynchronously.\n\nUse this endpoint to move a registered domain onto different contact information.", "method": "PUT", "path": "/api/domains/v1/whois/change", "inputSchema": { "type": "object", "properties": { "new_whois_id": { "type": "integer", "description": "WHOIS profile ID to assign to the domain" }, "domain": { "type": "string", "description": "Domain name" }, "change_for": { "type": "array", "description": "Contact roles to repoint to the new WHOIS profile", "items": { "type": "string", "description": "change_for parameter", "enum": [ "owner", "admin", "billing", "tech" ] } } }, "required": [ "new_whois_id", "domain", "change_for" ] }, "security": [ { "apiToken": [] } ], "group": "domains" }, { "name": "domains_whois_set-as-default", "title": "Set WHOIS profile as default", "annotations": { "title": "Set WHOIS profile as default", "readOnlyHint": false, "destructiveHint": true, "idempotentHint": true }, "description": "Set WHOIS contact profile as default.\n\nThe default profile is pre-selected for the TLD it belongs to when registering new domains.\n\nUse this endpoint to avoid picking contact information for every registration.", "method": "PUT", "path": "/api/domains/v1/whois/default/{whoisId}", "inputSchema": { "type": "object", "properties": { "whoisId": { "type": "integer", "description": "WHOIS ID" } }, "required": [ "whoisId" ] }, "security": [ { "apiToken": [] } ], "group": "domains" }, { "name": "domains_whois_unset-default", "title": "Unset default WHOIS profile", "annotations": { "title": "Unset default WHOIS profile", "readOnlyHint": false, "destructiveHint": true, "idempotentHint": true }, "description": "Unset WHOIS contact profile as default.\n\nThe profile itself is kept, it is only no longer pre-selected for its TLD.\n\nUse this endpoint to stop reusing contact information for new registrations.", "method": "DELETE", "path": "/api/domains/v1/whois/default/{whoisId}", "inputSchema": { "type": "object", "properties": { "whoisId": { "type": "integer", "description": "WHOIS ID" } }, "required": [ "whoisId" ] }, "security": [ { "apiToken": [] } ], "group": "domains" }, { "name": "domains_whois_get", "title": "Get WHOIS profile", "annotations": { "title": "Get WHOIS profile", "readOnlyHint": true, "destructiveHint": false }, "description": "Retrieve a WHOIS contact profile.\n\nUse this endpoint to view domain registration contact information.", "method": "GET", "path": "/api/domains/v1/whois/{whoisId}", "inputSchema": { "type": "object", "properties": { "whoisId": { "type": "integer", "description": "WHOIS ID" } }, "required": [ "whoisId" ] }, "security": [ { "apiToken": [] } ], "group": "domains" }, { "name": "domains_whois_delete", "title": "Delete WHOIS profile", "annotations": { "title": "Delete WHOIS profile", "readOnlyHint": false, "destructiveHint": true, "idempotentHint": true }, "description": "Delete WHOIS contact profile.\n\nUse this endpoint to remove unused contact profiles from account.", "method": "DELETE", "path": "/api/domains/v1/whois/{whoisId}", "inputSchema": { "type": "object", "properties": { "whoisId": { "type": "integer", "description": "WHOIS ID" } }, "required": [ "whoisId" ] }, "security": [ { "apiToken": [] } ], "group": "domains" }, { "name": "domains_whois_list", "title": "Get WHOIS profile list", "annotations": { "title": "Get WHOIS profile list", "readOnlyHint": true, "destructiveHint": false }, "description": "Retrieve WHOIS contact profiles.\n\nUse this endpoint to view available contact profiles for domain registration.", "method": "GET", "path": "/api/domains/v1/whois", "inputSchema": { "type": "object", "properties": { "tld": { "type": "string", "description": "Filter by TLD (without leading dot)" } }, "required": [] }, "security": [ { "apiToken": [] } ], "group": "domains" }, { "name": "domains_whois_create", "title": "Create WHOIS profile", "annotations": { "title": "Create WHOIS profile", "readOnlyHint": false, "destructiveHint": false }, "description": "Create WHOIS contact profile.\n\nUse this endpoint to add new contact information for domain registration.", "method": "POST", "path": "/api/domains/v1/whois", "inputSchema": { "type": "object", "properties": { "tld": { "type": "string", "description": "TLD of the domain (without leading dot)" }, "country": { "type": "string", "description": "ISO 3166 2-letter country code" }, "entity_type": { "type": "string", "description": "Legal entity type", "enum": [ "individual", "organization" ] }, "tld_details": { "type": "object", "description": "TLD details", "properties": {} }, "whois_details": { "type": "object", "description": "WHOIS details", "properties": {} } }, "required": [ "tld", "entity_type", "country", "whois_details" ] }, "security": [ { "apiToken": [] } ], "group": "domains" }, { "name": "domains_whois_usage", "title": "Get WHOIS profile usage", "annotations": { "title": "Get WHOIS profile usage", "readOnlyHint": true, "destructiveHint": false }, "description": "Retrieve domain list where provided WHOIS contact profile is used.\n\nUse this endpoint to view which domains use specific contact profiles.", "method": "GET", "path": "/api/domains/v1/whois/{whoisId}/usage", "inputSchema": { "type": "object", "properties": { "whoisId": { "type": "integer", "description": "WHOIS ID" } }, "required": [ "whoisId" ] }, "security": [ { "apiToken": [] } ], "group": "domains" }, { "name": "ecommerce_discounts_list", "title": "List discounts", "annotations": { "title": "List discounts", "readOnlyHint": true, "destructiveHint": false }, "description": "List a store's discounts. Filter by free text over code and name, or by disabled state.\nAmounts for fixed discounts are integers in the smallest currency unit; percentage\ndiscounts carry a whole-number value between 1 and 100.", "method": "GET", "path": "/api/ecommerce/v1/stores/{store_id}/discounts", "inputSchema": { "type": "object", "properties": { "store_id": { "type": "string", "description": "The ID of the store to list discounts for." }, "q": { "type": "string", "description": "Free-text search over discount code and name." }, "is_disabled": { "type": "string", "description": "Filter by disabled state.", "enum": [ "true", "false" ] }, "page": { "type": "integer", "description": "Page number" } }, "required": [ "store_id" ] }, "security": [ { "apiToken": [] } ], "group": "ecommerce" }, { "name": "ecommerce_discounts_create", "title": "Create a discount", "annotations": { "title": "Create a discount", "readOnlyHint": false, "destructiveHint": false }, "description": "Create a discount for a store. Fixed discounts take an amount in the smallest currency\nunit (e.g. $10 is 1000); percentage discounts take a whole-number value between 1 and 100.\nFree-shipping discounts ignore value. Returns the created discount.", "method": "POST", "path": "/api/ecommerce/v1/stores/{store_id}/discounts", "inputSchema": { "type": "object", "properties": { "store_id": { "type": "string", "description": "The ID of the store to create the discount for." }, "code": { "type": "string", "description": "The discount code customers enter at checkout." }, "name": { "type": "string", "description": "A human-friendly discount name." }, "type": { "type": "string", "description": "The discount type.", "enum": [ "percentage", "fixed", "free_shipping" ] }, "value": { "type": "integer", "description": "For percentage discounts a whole number 1-100; for fixed discounts an amount in the smallest currency unit (e.g. $10 is 1000). Ignored for free_shipping." }, "allocation": { "type": "string", "description": "Whether the discount applies to the cart total or to each eligible item.", "enum": [ "total", "item" ] }, "starts_at": { "type": "string", "description": "When the discount becomes active. A bare date (2026-11-27) anchors to time_zone. Defaults to now when omitted." }, "ends_at": { "type": "string", "description": "When the discount expires. A bare date runs to the end of that day in time_zone. Never expires when omitted." }, "usage_limit": { "type": "integer", "description": "Maximum number of times the discount can be redeemed." }, "min_cart_value": { "type": "integer", "description": "Minimum cart value in the smallest currency unit required for the discount to apply." }, "time_zone": { "type": "string", "description": "IANA time zone used to interpret starts_at and ends_at." } }, "required": [ "store_id", "code", "type", "value" ] }, "security": [ { "apiToken": [] } ], "group": "ecommerce" }, { "name": "ecommerce_miscellaneous_custom-storefront-setup-instructions", "title": "Get custom storefront setup instructions", "annotations": { "title": "Get custom storefront setup instructions", "readOnlyHint": true, "destructiveHint": false }, "description": "Retrieve step-by-step setup instructions, formatted as Markdown, for connecting a custom sales\nchannel to your store and keeping your catalog, orders, shipping and payments in sync through\nthe Ecommerce API.", "method": "GET", "path": "/api/ecommerce/v1/miscellaneous/custom-storefront-instructions", "inputSchema": { "type": "object", "properties": {}, "required": [] }, "security": [ { "apiToken": [] } ], "group": "ecommerce" }, { "name": "ecommerce_orders_cancel", "title": "Cancel an order", "annotations": { "title": "Cancel an order", "readOnlyHint": false, "destructiveHint": false }, "description": "Cancel the order and optionally email the customer. Returns the updated order summary.", "method": "POST", "path": "/api/ecommerce/v1/stores/{store_id}/orders/{order_id}/cancel", "inputSchema": { "type": "object", "properties": { "store_id": { "type": "string", "description": "The ID of the store that owns the order." }, "order_id": { "type": "string", "description": "The ID of the order to cancel." }, "notify_customer": { "type": "boolean", "description": "Whether to email the customer about the cancellation. Defaults to true." } }, "required": [ "store_id", "order_id" ] }, "security": [ { "apiToken": [] } ], "group": "ecommerce" }, { "name": "ecommerce_orders_fulfil", "title": "Fulfil an order", "annotations": { "title": "Fulfil an order", "readOnlyHint": false, "destructiveHint": false }, "description": "Create a fulfilment for the order and attach tracking in one call. Omit items to fulfil\nevery remaining unfulfilled item. Returns the updated order summary.", "method": "POST", "path": "/api/ecommerce/v1/stores/{store_id}/orders/{order_id}/fulfill", "inputSchema": { "type": "object", "properties": { "store_id": { "type": "string", "description": "The ID of the store that owns the order." }, "order_id": { "type": "string", "description": "The ID of the order to fulfil." }, "items": { "type": "array", "description": "Line items to fulfil. Omit to fulfil every remaining unfulfilled item.", "items": { "type": "object", "description": "items parameter", "properties": { "line_item_id": { "type": "string", "description": "The line item to fulfil, from the order detail items[].id." }, "quantity": { "type": "integer", "description": "Quantity of the line item to fulfil." } }, "required": [ "line_item_id", "quantity" ] } }, "tracking_number": { "type": "string", "description": "Carrier tracking number for the shipment." }, "tracking_url": { "type": "string", "description": "Public tracking URL for the shipment. Requires tracking_number." }, "notify_customer": { "type": "boolean", "description": "Whether to email the customer about the fulfilment. Defaults to true." } }, "required": [ "store_id", "order_id" ] }, "security": [ { "apiToken": [] } ], "group": "ecommerce" }, { "name": "ecommerce_orders_list-store", "title": "List store orders", "annotations": { "title": "List store orders", "readOnlyHint": true, "destructiveHint": false }, "description": "List a store's orders newest first as summaries. Filter by status, payment or fulfilment\nstatus, customer email, order number or a free-text query. Amounts are in the smallest\ncurrency unit. Retrieve a single order for its line items, addresses and fulfilments.", "method": "GET", "path": "/api/ecommerce/v1/stores/{store_id}/orders", "inputSchema": { "type": "object", "properties": { "store_id": { "type": "string", "description": "The ID of the store to list orders for." }, "status": { "type": "array", "description": "Order statuses to include.", "items": { "type": "string", "description": "status parameter", "enum": [ "pending", "completed", "archived", "canceled", "requires_action" ] } }, "payment_status": { "type": "array", "description": "Payment statuses to include. A paid order is \"captured\".", "items": { "type": "string", "description": "payment_status parameter", "enum": [ "not_paid", "awaiting", "captured", "partially_refunded", "refunded", "canceled", "requires_action", "not_required" ] } }, "fulfillment_status": { "type": "array", "description": "Fulfilment statuses to include.", "items": { "type": "string", "description": "fulfillment_status parameter", "enum": [ "not_fulfilled", "partially_fulfilled", "fulfilled", "partially_shipped", "shipped", "partially_returned", "returned", "canceled", "requires_action" ] } }, "email": { "type": "string", "description": "Customer email, matched exactly." }, "display_id": { "type": "string", "description": "The order number the merchant and customer see." }, "q": { "type": "string", "description": "Free-text search over customer name, email, order number and line items." }, "created_at_from": { "type": "string", "description": "Earliest creation time to include, inclusive. Accepts a date or ISO date-time (UTC)." }, "created_at_to": { "type": "string", "description": "Latest creation time to include, inclusive. A bare date covers that whole day." }, "page": { "type": "integer", "description": "Page number" } }, "required": [ "store_id" ] }, "security": [ { "apiToken": [] } ], "group": "ecommerce" }, { "name": "ecommerce_orders_retrieve", "title": "Retrieve an order", "annotations": { "title": "Retrieve an order", "readOnlyHint": true, "destructiveHint": false }, "description": "Retrieve one order in full: line items (each with the id the fulfil endpoint needs),\naddresses, the totals breakdown and fulfilments with tracking. Amounts are in the\nsmallest currency unit.", "method": "GET", "path": "/api/ecommerce/v1/stores/{store_id}/orders/{order_id}", "inputSchema": { "type": "object", "properties": { "store_id": { "type": "string", "description": "The ID of the store that owns the order." }, "order_id": { "type": "string", "description": "The ID of the order to retrieve." } }, "required": [ "store_id", "order_id" ] }, "security": [ { "apiToken": [] } ], "group": "ecommerce" }, { "name": "ecommerce_payments_enable-manual-method", "title": "Enable manual payment method", "annotations": { "title": "Enable manual payment method", "readOnlyHint": false, "destructiveHint": false }, "description": "Enable a manual payment method so the store can accept orders without an online payment provider.", "method": "POST", "path": "/api/ecommerce/v1/stores/{store_id}/payment-methods/manual", "inputSchema": { "type": "object", "properties": { "store_id": { "type": "string", "description": "The ID of the store to enable manual payment for." }, "title": { "type": "string", "description": "Optional display name shown to customers at checkout." } }, "required": [ "store_id" ] }, "security": [ { "apiToken": [] } ], "group": "ecommerce" }, { "name": "ecommerce_payments_create-provider-connect-link", "title": "Create a payment provider connect link", "annotations": { "title": "Create a payment provider connect link", "readOnlyHint": false, "destructiveHint": false }, "description": "Create an onboarding link for connecting a payment gateway to the store. Returns the gateway\nonboarding URL for the merchant to open and a deep-link into the store admin.", "method": "POST", "path": "/api/ecommerce/v1/stores/{store_id}/payment-providers/{provider_id}/connect-link", "inputSchema": { "type": "object", "properties": { "store_id": { "type": "string", "description": "The ID of the store to connect the payment provider to." }, "provider_id": { "type": "string", "description": "The ID of the payment gateway to connect, e.g. stripe." } }, "required": [ "store_id", "provider_id" ] }, "security": [ { "apiToken": [] } ], "group": "ecommerce" }, { "name": "ecommerce_payments_list-store-providers", "title": "List store payment providers", "annotations": { "title": "List store payment providers", "readOnlyHint": true, "destructiveHint": false }, "description": "List a store's payment providers, split into providers already connected to the store and\ngateways available to install. Never exposes gateway credentials, secrets, or configuration.", "method": "GET", "path": "/api/ecommerce/v1/stores/{store_id}/payment-providers", "inputSchema": { "type": "object", "properties": { "store_id": { "type": "string", "description": "The ID of the store to list payment providers for." }, "include_currency_unsupported": { "type": "boolean", "description": "Include gateways that do not support the store currency in the available list." } }, "required": [ "store_id" ] }, "security": [ { "apiToken": [] } ], "group": "ecommerce" }, { "name": "ecommerce_products_create-image-upload-url", "title": "Create a product image upload URL", "annotations": { "title": "Create a product image upload URL", "readOnlyHint": false, "destructiveHint": false }, "description": "Returns a signed URL to upload a product image to (multipart/form-data POST). Then call the\nattach-image endpoint with the returned object_name to scan and attach it to the product.", "method": "POST", "path": "/api/ecommerce/v1/stores/{store_id}/products/{product_id}/images/upload-url", "inputSchema": { "type": "object", "properties": { "store_id": { "type": "string", "description": "The ID of the store the product belongs to." }, "product_id": { "type": "string", "description": "The ID of the product the image will be attached to." } }, "required": [ "store_id", "product_id" ] }, "security": [ { "apiToken": [] } ], "group": "ecommerce" }, { "name": "ecommerce_products_delete", "title": "Delete a product", "annotations": { "title": "Delete a product", "readOnlyHint": false, "destructiveHint": true, "idempotentHint": true }, "description": "Delete a product and its variants from the store. A subscription product with active\nsubscribers is archived instead of deleted so its data stays available.", "method": "DELETE", "path": "/api/ecommerce/v1/stores/{store_id}/products/{product_id}", "inputSchema": { "type": "object", "properties": { "store_id": { "type": "string", "description": "The ID of the store that owns the product." }, "product_id": { "type": "string", "description": "The ID of the product to delete." } }, "required": [ "store_id", "product_id" ] }, "security": [ { "apiToken": [] } ], "group": "ecommerce" }, { "name": "ecommerce_products_update", "title": "Update a product", "annotations": { "title": "Update a product", "readOnlyHint": false, "destructiveHint": true, "idempotentHint": true }, "description": "Update a product's name, description, status, SEO settings or collections. Set status to\npublished to make it buyable, draft to hide it, or archived to retire it. SEO settings (title,\ndescription, slug) left out keep their values. collection_changes adds or removes collections\nwithout touching the others. Variants, prices and inventory are managed through the variant\nendpoints, not here. Returns the updated product summary.", "method": "PATCH", "path": "/api/ecommerce/v1/stores/{store_id}/products/{product_id}", "inputSchema": { "type": "object", "properties": { "store_id": { "type": "string", "description": "The ID of the store that owns the product." }, "product_id": { "type": "string", "description": "The ID of the product to update." }, "name": { "type": "string", "description": "The product name." }, "description": { "type": "string", "description": "The product description." }, "status": { "type": "string", "description": "Set \"published\" to make the product buyable, \"draft\" to hide it, or \"archived\" to retire it.", "enum": [ "draft", "published", "archived" ] }, "seo_settings": { "type": "object", "description": "Search-engine settings to change. Send at least one field; omitted fields keep their current values.", "properties": { "title": { "type": "string", "description": "Search-engine title for the product page." }, "description": { "type": "string", "description": "Search-engine description for the product page." }, "slug": { "type": "string", "description": "URL slug of the product page. Lowercase letters, digits and dashes." } } }, "collection_changes": { "type": "object", "description": "Adds the product to or removes it from collections without touching its other collections. Send at least one collection in add or remove.", "properties": { "add": { "type": "array", "description": "Collections to add the product to. Every id must exist in the store.", "items": { "type": "object", "description": "add parameter", "properties": { "id": { "type": "string", "description": "The collection id." } }, "required": [ "id" ] } }, "remove": { "type": "array", "description": "Collections to take the product out of. Ids the product is not in are ignored.", "items": { "type": "object", "description": "remove parameter", "properties": { "id": { "type": "string", "description": "The collection id." } }, "required": [ "id" ] } } } } }, "required": [ "store_id", "product_id" ] }, "security": [ { "apiToken": [] } ], "group": "ecommerce" }, { "name": "ecommerce_products_create-digital", "title": "Create digital product", "annotations": { "title": "Create digital product", "readOnlyHint": false, "destructiveHint": false }, "description": "Create a published digital product with a single variant and an optional external download link.", "method": "POST", "path": "/api/ecommerce/v1/stores/{store_id}/products/digital", "inputSchema": { "type": "object", "properties": { "store_id": { "type": "string", "description": "The ID of the store to create the product in." }, "name": { "type": "string", "description": "The product name." }, "price": { "type": "integer", "description": "Price in the smallest currency unit (e.g. cents). Must be positive." }, "description": { "type": "string", "description": "The product description." }, "currency": { "type": "string", "description": "ISO 4217 currency code. Defaults to the store's default currency when omitted." }, "download_url": { "type": "string", "description": "Optional external download link delivered to the customer after purchase." } }, "required": [ "store_id", "name", "price" ] }, "security": [ { "apiToken": [] } ], "group": "ecommerce" }, { "name": "ecommerce_products_list", "title": "List products", "annotations": { "title": "List products", "readOnlyHint": true, "destructiveHint": false }, "description": "List a store's products newest first as lean summaries (name, status, thumbnail, variant\ncount and price range). Prices are integers in the smallest currency unit and live on\nvariants. Filter by status, free text or a set of product ids. Use include=variants to\nembed each product's variants with prices and inventory, and include=media to embed its media.", "method": "GET", "path": "/api/ecommerce/v1/stores/{store_id}/products", "inputSchema": { "type": "object", "properties": { "store_id": { "type": "string", "description": "The ID of the store to list products for." }, "product_ids": { "type": "array", "description": "Restrict to these product ids. Doubles as a single-product lookup. Up to 200 ids.", "items": { "type": "string", "description": "product_ids parameter" } }, "status": { "type": "array", "description": "Product statuses to include.", "items": { "type": "string", "description": "status parameter", "enum": [ "draft", "proposed", "published", "rejected", "archived" ] } }, "q": { "type": "string", "description": "Free-text search over product title and SKU." }, "include": { "type": "array", "description": "Opt-in heavy data: \"variants\" embeds each product's variants; \"media\" embeds its media.", "items": { "type": "string", "description": "include parameter", "enum": [ "variants", "media" ] } }, "page": { "type": "integer", "description": "Page number" } }, "required": [ "store_id" ] }, "security": [ { "apiToken": [] } ], "group": "ecommerce" }, { "name": "ecommerce_products_create-physical", "title": "Create physical product", "annotations": { "title": "Create physical product", "readOnlyHint": false, "destructiveHint": false }, "description": "Create a published physical product with a single variant priced in the store currency.", "method": "POST", "path": "/api/ecommerce/v1/stores/{store_id}/products/physical", "inputSchema": { "type": "object", "properties": { "store_id": { "type": "string", "description": "The ID of the store to create the product in." }, "name": { "type": "string", "description": "The product name." }, "price": { "type": "integer", "description": "Price in the smallest currency unit (e.g. cents). Must be positive." }, "description": { "type": "string", "description": "The product description." }, "currency": { "type": "string", "description": "ISO 4217 currency code. Defaults to the store's default currency when omitted." }, "seo_settings": { "type": "object", "description": "Search-engine settings. Omitted fields are generated from the name and description; a slug already in use gets a numeric suffix. Send at least one field.", "properties": { "title": { "type": "string", "description": "Search-engine title for the product page." }, "description": { "type": "string", "description": "Search-engine description for the product page." }, "slug": { "type": "string", "description": "URL slug of the product page. Lowercase letters, digits and dashes." } } } }, "required": [ "store_id", "name", "price" ] }, "security": [ { "apiToken": [] } ], "group": "ecommerce" }, { "name": "ecommerce_products_upload-and-attach-image", "title": "Upload and attach a product image", "annotations": { "title": "Upload and attach a product image", "readOnlyHint": false, "destructiveHint": false }, "description": "Fetch a raster image (JPEG, PNG, GIF or WebP, max 15MB) from a URL and attach it to a product in a\nsingle call. Image downloads require HTTPS on port 443 without embedded credentials. At most one redirect\nis allowed, and its destination must meet the same requirements. Private or reserved network\ndestinations, unsupported URLs and longer redirect chains are rejected. The image is virus-scanned\nand validated by content, then stored on the CDN. Set is_thumbnail to make it the product's primary image.", "method": "POST", "path": "/api/ecommerce/v1/stores/{store_id}/products/{product_id}/images", "inputSchema": { "type": "object", "properties": { "store_id": { "type": "string", "description": "The ID of the store the product belongs to." }, "product_id": { "type": "string", "description": "The ID of the product to attach the image to." }, "image_url": { "type": "string", "description": "Publicly reachable URL of a raster image (JPEG, PNG, GIF or WebP), maximum 15MB. Fetching\nthe image requires HTTPS on port 443 without embedded credentials. At most one redirect\nis allowed; its destination must meet the same URL requirements. Private or reserved\nnetwork destinations, unsupported URLs and longer redirect chains are rejected. The image\nis fetched, virus-scanned and validated by content, then stored on the CDN. SVG is not\naccepted. Provide either this or object_name." }, "object_name": { "type": "string", "description": "Key returned by the upload-url endpoint. Provide this instead of image_url to attach an uploaded image." }, "is_thumbnail": { "type": "boolean", "description": "When true, the image becomes the product's thumbnail (primary image). When omitted, it becomes the\nthumbnail only if the product does not have one yet." } }, "required": [ "store_id", "product_id" ] }, "security": [ { "apiToken": [] } ], "group": "ecommerce" }, { "name": "ecommerce_sales-channels_list", "title": "List sales channels", "annotations": { "title": "List sales channels", "readOnlyHint": true, "destructiveHint": false }, "description": "List a store's active sales channels with their full metadata.", "method": "GET", "path": "/api/ecommerce/v1/stores/{store_id}/sales-channels", "inputSchema": { "type": "object", "properties": { "store_id": { "type": "string", "description": "The ID of the store to list sales channels for." } }, "required": [ "store_id" ] }, "security": [ { "apiToken": [] } ], "group": "ecommerce" }, { "name": "ecommerce_sales-channels_create", "title": "Create a sales channel", "annotations": { "title": "Create a sales channel", "readOnlyHint": false, "destructiveHint": false }, "description": "Create a sales channel for a store. A \"custom\" channel is headless: build your own frontend and keep\nyour catalog, orders, shipping and payments in sync through the Ecommerce API. A \"quick-link\" channel\nis a hosted one-page store whose handle is auto-generated.", "method": "POST", "path": "/api/ecommerce/v1/stores/{store_id}/sales-channels", "inputSchema": { "type": "object", "properties": { "store_id": { "type": "string", "description": "The ID of the store to create the sales channel for." }, "type": { "type": "string", "description": "Sales channel type. \"custom\" is a headless channel: it requires a name and takes an optional public url.\n\"quick-link\" is a one-page store whose handle is auto-generated; it supports neither name nor url.", "enum": [ "custom", "quick-link" ] }, "name": { "type": "string", "description": "Merchant-facing custom name. Required for custom channels; not supported for quick-link." }, "url": { "type": "string", "description": "Optional public url for the channel. Custom channels only; not supported for quick-link." } }, "required": [ "store_id", "type" ] }, "security": [ { "apiToken": [] } ], "group": "ecommerce" }, { "name": "ecommerce_sales-channels_update", "title": "Update sales channel", "annotations": { "title": "Update sales channel", "readOnlyHint": false, "destructiveHint": true, "idempotentHint": true }, "description": "Update a custom sales channel. The merchant-facing `name` and the public `url`\n(returned as the channel `domain`) can be changed. Pass `null` to clear a value.", "method": "PATCH", "path": "/api/ecommerce/v1/stores/{store_id}/sales-channels/{sales_channel_id}", "inputSchema": { "type": "object", "properties": { "store_id": { "type": "string", "description": "The ID of the store that owns the sales channel." }, "sales_channel_id": { "type": "string", "description": "The ID of the sales channel to update." }, "name": { "type": "string", "description": "Merchant-facing custom name shown in the sales channels list. Pass null to clear it." }, "url": { "type": "string", "description": "Public address where the custom sales channel lives. Pass null to clear it." } }, "required": [ "store_id", "sales_channel_id" ] }, "security": [ { "apiToken": [] } ], "group": "ecommerce" }, { "name": "ecommerce_shipping_set-store", "title": "Set store shipping", "annotations": { "title": "Set store shipping", "readOnlyHint": false, "destructiveHint": false }, "description": "Set the flat-rate shipping price for a store, creating the shipping zone if it does not exist yet.", "method": "POST", "path": "/api/ecommerce/v1/stores/{store_id}/shipping", "inputSchema": { "type": "object", "properties": { "store_id": { "type": "string", "description": "The ID of the store to configure shipping for." }, "price": { "type": "integer", "description": "Flat shipping rate in the smallest currency unit (e.g. cents). Use 0 for free shipping." } }, "required": [ "store_id", "price" ] }, "security": [ { "apiToken": [] } ], "group": "ecommerce" }, { "name": "ecommerce_stores_delete", "title": "Delete store", "annotations": { "title": "Delete store", "readOnlyHint": false, "destructiveHint": true, "idempotentHint": true }, "description": "Soft-delete a store owned by your account.\n\nThe underlying store data is preserved; only the store is marked as deleted.", "method": "DELETE", "path": "/api/ecommerce/v1/stores/{store_id}", "inputSchema": { "type": "object", "properties": { "store_id": { "type": "string", "description": "The ID of the store to delete." } }, "required": [ "store_id" ] }, "security": [ { "apiToken": [] } ], "group": "ecommerce" }, { "name": "ecommerce_stores_list", "title": "Get stores", "annotations": { "title": "Get stores", "readOnlyHint": true, "destructiveHint": false }, "description": "Retrieve the stores associated with your account.", "method": "GET", "path": "/api/ecommerce/v1/stores", "inputSchema": { "type": "object", "properties": { "page": { "type": "integer", "description": "Page number" } }, "required": [] }, "security": [ { "apiToken": [] } ], "group": "ecommerce" }, { "name": "ecommerce_stores_create", "title": "Create store", "annotations": { "title": "Create store", "readOnlyHint": false, "destructiveHint": false }, "description": "Create a new store for your account.\n\nA primary sales channel is created alongside the store.", "method": "POST", "path": "/api/ecommerce/v1/stores", "inputSchema": { "type": "object", "properties": { "name": { "type": "string", "description": "name parameter" }, "country_code": { "type": "string", "description": "ISO 3166-1 alpha-2 country code." }, "company_email": { "type": "string", "description": "company_email parameter" }, "company_name": { "type": "string", "description": "company_name parameter" }, "language": { "type": "string", "description": "ISO 639-1 language code." }, "sales_channel": { "type": "object", "description": "sales_channel parameter", "properties": { "type": { "type": "string", "description": "Sales channel type. Only \"custom\" channels can be created via the API.", "enum": [ "custom" ] }, "external_id": { "type": "string", "description": "External identifier for the sales channel." } } } }, "required": [] }, "security": [ { "apiToken": [] } ], "group": "ecommerce" }, { "name": "ecommerce_stores_metadata", "title": "Get store metadata", "annotations": { "title": "Get store metadata", "readOnlyHint": true, "destructiveHint": false }, "description": "Get a store's readiness metadata: whether payment methods and shipping are configured,\nplus its default currency. Useful to verify prerequisites before building a storefront.", "method": "GET", "path": "/api/ecommerce/v1/stores/{store_id}/metadata", "inputSchema": { "type": "object", "properties": { "store_id": { "type": "string", "description": "The ID of the store to read metadata for." } }, "required": [ "store_id" ] }, "security": [ { "apiToken": [] } ], "group": "ecommerce" }, { "name": "ecommerce_product-variants_update-in-batch", "title": "Update product variants in batch", "annotations": { "title": "Update product variants in batch", "readOnlyHint": false, "destructiveHint": true, "idempotentHint": true }, "description": "Update up to 100 existing variants in place by id — title, SKU, inventory, stock tracking\nand prices. Variants omitted from the request are left untouched. Prices replace the variant's\nexisting prices in full. Returns the updated variants.", "method": "PATCH", "path": "/api/ecommerce/v1/stores/{store_id}/products/{product_id}/variants/batch", "inputSchema": { "type": "object", "properties": { "store_id": { "type": "string", "description": "The ID of the store that owns the product." }, "product_id": { "type": "string", "description": "The ID of the product whose variants are being updated." }, "variants": { "type": "array", "description": "Variants to update in place by id, up to 100. Variants omitted from the list are left untouched.", "items": { "type": "object", "description": "variants parameter", "properties": { "variant_id": { "type": "string", "description": "The id of the variant to update." }, "title": { "type": "string", "description": "The variant title." }, "sku": { "type": "string", "description": "The variant SKU." }, "inventory_quantity": { "type": "integer", "description": "Units in stock." }, "manage_inventory": { "type": "boolean", "description": "Whether stock is tracked for this variant." }, "prices": { "type": "array", "description": "The full list of prices for the variant, replacing the existing ones. A free item is amount: 0.", "items": { "type": "object", "description": "prices parameter", "properties": { "amount": { "type": "integer", "description": "Price in the smallest currency unit (e.g. cents)." }, "sale_amount": { "type": "integer", "description": "Optional sale price in the smallest currency unit; must be lower than amount." }, "currency": { "type": "string", "description": "ISO 4217 currency code. Defaults to the store's default currency." } }, "required": [ "amount" ] } } }, "required": [ "variant_id" ] } } }, "required": [ "store_id", "product_id", "variants" ] }, "security": [ { "apiToken": [] } ], "group": "ecommerce" }, { "name": "ecommerce_product-variants_delete", "title": "Delete a product variant", "annotations": { "title": "Delete a product variant", "readOnlyHint": false, "destructiveHint": true, "idempotentHint": true }, "description": "Delete a single variant from the product.", "method": "DELETE", "path": "/api/ecommerce/v1/stores/{store_id}/products/{product_id}/variants/{variant_id}", "inputSchema": { "type": "object", "properties": { "store_id": { "type": "string", "description": "The ID of the store that owns the product." }, "product_id": { "type": "string", "description": "The ID of the product that owns the variant." }, "variant_id": { "type": "string", "description": "The ID of the variant to delete." } }, "required": [ "store_id", "product_id", "variant_id" ] }, "security": [ { "apiToken": [] } ], "group": "ecommerce" }, { "name": "ecommerce_product-variants_list", "title": "List product variants", "annotations": { "title": "List product variants", "readOnlyHint": true, "destructiveHint": false }, "description": "List a product's variants, ordered by rank, with their options, prices and inventory.\nPrices are integers in the smallest currency unit and live on variants.", "method": "GET", "path": "/api/ecommerce/v1/stores/{store_id}/products/{product_id}/variants", "inputSchema": { "type": "object", "properties": { "store_id": { "type": "string", "description": "The ID of the store that owns the product." }, "product_id": { "type": "string", "description": "The ID of the product to list variants for." }, "page": { "type": "integer", "description": "Page number" } }, "required": [ "store_id", "product_id" ] }, "security": [ { "apiToken": [] } ], "group": "ecommerce" }, { "name": "ecommerce_product-variants_create", "title": "Create a product variant", "annotations": { "title": "Create a product variant", "readOnlyHint": false, "destructiveHint": false }, "description": "Add a variant to a product along one or more option dimensions (e.g. Size, Color). Options\nmissing from the product are created automatically; provide a value for every option the\nproduct already has. Prices are integers in the smallest currency unit and default to the\nstore currency. Returns the created variant.", "method": "POST", "path": "/api/ecommerce/v1/stores/{store_id}/products/{product_id}/variants", "inputSchema": { "type": "object", "properties": { "store_id": { "type": "string", "description": "The ID of the store that owns the product." }, "product_id": { "type": "string", "description": "The ID of the product to add the variant to." }, "title": { "type": "string", "description": "The variant title. Defaults to the option values joined with ' / ' (e.g. 'Red / L')." }, "sku": { "type": "string", "description": "The variant SKU." }, "options": { "type": "array", "description": "Option name/value pairs that distinguish this variant, e.g. [{name: Size, value: M}]. Options missing from the product are created; provide a value for every option the product already has.", "items": { "type": "object", "description": "options parameter", "properties": { "name": { "type": "string", "description": "Option name, e.g. Size." }, "value": { "type": "string", "description": "Option value for this variant, e.g. M." } }, "required": [ "name", "value" ] } }, "prices": { "type": "array", "description": "Prices per currency. Amounts are integers in the smallest currency unit. A free item is amount: 0.", "items": { "type": "object", "description": "prices parameter", "properties": { "amount": { "type": "integer", "description": "Price in the smallest currency unit (e.g. cents)." }, "sale_amount": { "type": "integer", "description": "Optional sale price in the smallest currency unit; must be lower than amount." }, "currency": { "type": "string", "description": "ISO 4217 currency code. Defaults to the store's default currency when omitted." } }, "required": [ "amount" ] } }, "inventory_quantity": { "type": "integer", "description": "Units in stock. Defaults to 0." }, "manage_inventory": { "type": "boolean", "description": "Whether stock is tracked for this variant. Defaults to false." } }, "required": [ "store_id", "product_id", "options" ] }, "security": [ { "apiToken": [] } ], "group": "ecommerce" }, { "name": "horizons_websites_clone", "title": "Clone website", "annotations": { "title": "Clone website", "readOnlyHint": false, "destructiveHint": false }, "description": "Clone a Hostinger Horizons website into a new website.\\n\nUse this tool when the user wants a copy of an existing website, for example to try out\nchanges without touching the original.\\n\nThis tool returns the ID and URL of the newly created copy.\nThe original website is left untouched.\\n\nTo edit the copy, use the `Edit website` tool with the returned website ID, or the user can\nopen the provided website URL in Hostinger Horizons interface.", "method": "POST", "path": "/api/horizons/v1/websites/{websiteId}/clone", "inputSchema": { "type": "object", "properties": { "websiteId": { "type": "string", "description": "The website ID" } }, "required": [ "websiteId" ] }, "security": [ { "apiToken": [] } ], "group": "horizons" }, { "name": "horizons_websites_list", "title": "Get website list", "annotations": { "title": "Get website list", "readOnlyHint": true, "destructiveHint": false }, "description": "List the Hostinger Horizons websites the user owns.\\n\nUse this tool when the user asks which websites they have, or when you need a website ID\nbefore editing, publishing or cloning a website.\\n\nEach website is returned with its ID, status, domain and the URL to open it\nin Hostinger Horizons interface.\\n\nThe complete list of websites is returned in a single response - it is not paginated.", "method": "GET", "path": "/api/horizons/v1/websites", "inputSchema": { "type": "object", "properties": {}, "required": [] }, "security": [ { "apiToken": [] } ], "group": "horizons" }, { "name": "horizons_websites_create", "title": "Create website", "annotations": { "title": "Create website", "readOnlyHint": false, "destructiveHint": false }, "description": "Create new Hostinger Horizons website from the given message.\\n\nUse this tool when user asks you to create a website, landing page, blog\nor any other type of application.\\n\nThis tool initiates the website creation process and returns a website URL and ID.\nThe generation happens asynchronously.\\n\nAfter invoking this tool, your chat reply must be EXACTLY 1 sentence summarizing\nthat Hostinger Horizons is now creating their website and it will be ready in a few minutes\nand you should provide the website URL to the user immediately\nDo not write code.\\n\\nTo edit afterwards, use the `Edit website` tool with the returned\nwebsite ID, or the user can go to Hostinger Horizons interface in the provided website URL.\nIf the tool call fails with an error, you should provide a clear explanation of the error\nand do not generate code yourself in the chat.\n\\n\nTECHNOLOGY STACK CONSTRAINTS (STRICTLY ENFORCED):\\n\nThe environment is limited to the following technologies.\nYou MUST NOT use, suggest, or implement any technology outside this list:\\n\n\\n\n- Language: JavaScript ONLY.\n- Languages like TypeScript, Rust, Python, Java, PHP, etc., are STRICTLY PROHIBITED.\\n\n- Framework: React.\\n\n- Navigation: React Router.\\n\n- Styling: TailwindCSS.\\n\n- Components: shadcn/ui (built with @radix-ui primitives).\\n\n- Icons: Lucide React.\\n\n- Animations: Framer Motion.\\n\n\\n\nBACKEND & DATA STORAGE:\\n\n- Horizons integrated backend is the EXCLUSIVE solution for persistent data storage,\nauthentication, and database needs.\\n\n- Local databases (SQLite, MySQL, etc.) are STRICTLY PROHIBITED.\\n\n- Third-party services (Firebase, AWS Amplify) are allowed ONLY if explicitly requested by the user.\\n\n\\n\nMAPS:\\n\n- OpenStreetMap is the default provider.\\n\n- Alternative providers (Google Maps, Mapbox) are allowed ONLY if explicitly requested by the user.\\n", "method": "POST", "path": "/api/horizons/v1/websites", "inputSchema": { "type": "object", "properties": { "message": { "type": "array", "description": "message parameter", "items": { "type": "object", "description": "message parameter", "properties": { "type": { "type": "string", "description": "type parameter", "enum": [ "text" ] }, "text": { "type": "string", "description": "Detailed project specification.\nInclude purpose, key features, user flows, data models, and design preferences.\nThe specification should be detailed and comprehensive, covering all aspects of the project." } }, "required": [ "type", "text" ] } } }, "required": [ "message" ] }, "security": [ { "apiToken": [] } ], "group": "horizons" }, { "name": "horizons_websites_edit", "title": "Edit website", "annotations": { "title": "Edit website", "readOnlyHint": false, "destructiveHint": false }, "description": "Edit an existing Hostinger Horizons website with a follow-up message.\\n\nUse this tool when the user wants to change, extend or fix a website that already exists.\\n\nThis tool queues the requested changes and returns the website URL and ID.\nThe changes are applied asynchronously.\\n\nAfter invoking this tool, your chat reply must be EXACTLY 1 sentence summarizing\nthat Hostinger Horizons is now applying the requested changes and they will be ready\nin a few minutes, and you should provide the website URL to the user immediately.\nDo not write code.\\n\nIf the tool call fails with an error, you should provide a clear explanation of the error\nand do not generate code yourself in the chat.", "method": "POST", "path": "/api/horizons/v1/websites/{websiteId}/messages", "inputSchema": { "type": "object", "properties": { "websiteId": { "type": "string", "description": "The website ID" }, "message": { "type": "array", "description": "message parameter", "items": { "type": "object", "description": "message parameter", "properties": { "type": { "type": "string", "description": "type parameter", "enum": [ "text" ] }, "text": { "type": "string", "description": "Detailed description of the changes to apply to the website.\nInclude which sections, features, content or design should change and how.\nThe specification should be detailed and comprehensive, covering all requested changes." } }, "required": [ "type", "text" ] } } }, "required": [ "websiteId", "message" ] }, "security": [ { "apiToken": [] } ], "group": "horizons" }, { "name": "horizons_websites_publish", "title": "Publish website", "annotations": { "title": "Publish website", "readOnlyHint": false, "destructiveHint": false }, "description": "Publish a Hostinger Horizons website so its latest changes go live.\\n\nUse this tool when the user asks to publish, deploy or make their website live.\\n\nThis tool starts the publish process and returns the URL the website will be live on.\nPublishing happens asynchronously and takes a few minutes.\\n\nSet `is_template` only when the user explicitly asks to share the website as a template:\ntrue adds a \"Use template\" banner to its published pages that copies the website into the\nvisitor's own account, and false removes it. Leave it out to keep the current setting.\\n\nAfter invoking this tool, your chat reply must be EXACTLY 1 sentence summarizing\nthat the website is being published and you should provide the published URL to the user immediately.", "method": "POST", "path": "/api/horizons/v1/websites/{websiteId}/publish", "inputSchema": { "type": "object", "properties": { "websiteId": { "type": "string", "description": "The website ID" }, "is_template": { "type": "boolean", "description": "Set to true to publish the website as a template: its published pages show a \"Use template\" banner\nthat copies the website into the visitor's own account. Set to false to remove the banner.\nLeave it out to keep the current setting." } }, "required": [ "websiteId" ] }, "security": [ { "apiToken": [] } ], "group": "horizons" }, { "name": "horizons_websites_get", "title": "Get website", "annotations": { "title": "Get website", "readOnlyHint": true, "destructiveHint": false }, "description": "Get the link for the user to open their website in Hostinger Horizons interface.\\n\nUse this tool when the user wants the link to an existing website, or when you need its\nwebsite URL before or after editing it.\\n\n`is_in_progress` is true while changes are being generated or the website is being published;\nwait until it is false before publishing. `published_at` is when the website was last published,\n`is_template` is whether its published pages show the \"Use template\" banner, and\n`has_ecommerce_store` is whether it has an online store.\\n\nWebsites can be edited with the `Edit website` tool, or by the user in Hostinger Horizons\ninterface in the provided website URL.", "method": "GET", "path": "/api/horizons/v1/websites/{websiteId}", "inputSchema": { "type": "object", "properties": { "websiteId": { "type": "string", "description": "The website ID" } }, "required": [ "websiteId" ] }, "security": [ { "apiToken": [] } ], "group": "horizons" }, { "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" }, { "name": "mail_aliases_create-alias", "title": "Create alias", "annotations": { "title": "Create alias", "readOnlyHint": false, "destructiveHint": false }, "description": "Create an alias for the given mailbox. The alias address is formed\nfrom the given local part and the domain of the mailbox. Messages\nsent to the alias are delivered to the mailbox.", "method": "POST", "path": "/api/mail/v1/mailboxes/{mailboxId}/aliases", "inputSchema": { "type": "object", "properties": { "mailboxId": { "type": "string", "description": "Mailbox resource ID" }, "local_part": { "type": "string", "description": "Local part of the alias address (the part before the @). The domain is taken from the mailbox. Case-insensitive and stored lowercase; must start and end with a letter or digit; single dots, underscores and hyphens are allowed in between." } }, "required": [ "mailboxId", "local_part" ] }, "security": [ { "apiToken": [] } ], "group": "mail" }, { "name": "mail_aliases_delete-alias", "title": "Delete alias", "annotations": { "title": "Delete alias", "readOnlyHint": false, "destructiveHint": true, "idempotentHint": true }, "description": "Delete an alias. Messages sent to the alias address are no longer\ndelivered to the mailbox.", "method": "DELETE", "path": "/api/mail/v1/aliases/{aliasId}", "inputSchema": { "type": "object", "properties": { "aliasId": { "type": "string", "description": "Alias resource ID" } }, "required": [ "aliasId" ] }, "security": [ { "apiToken": [] } ], "group": "mail" }, { "name": "mail_aliases_list", "title": "List aliases", "annotations": { "title": "List aliases", "readOnlyHint": true, "destructiveHint": false }, "description": "Retrieve a paginated list of aliases across all mailboxes of a mail\norder.", "method": "GET", "path": "/api/mail/v1/orders/{orderId}/aliases", "inputSchema": { "type": "object", "properties": { "orderId": { "type": "string", "description": "Order resource ID" }, "page": { "type": "integer", "description": "Page number" }, "per_page": { "type": "integer", "description": "Number of items per page" } }, "required": [ "orderId" ] }, "security": [ { "apiToken": [] } ], "group": "mail" }, { "name": "mail_api-tokens_create", "title": "Create API token", "annotations": { "title": "Create API token", "readOnlyHint": false, "destructiveHint": false }, "description": "Create an API token for the given mail order. The token grants access\nto the [Hostinger Email API](https://api.mail.hostinger.com/), where\nyou can provision and manage the mailboxes it is scoped to.\n\nThe plaintext token is returned only in this response, never again.\nA maximum of 10 tokens can exist per order. Use\n`scope.has_all_mailboxes` to cover all current and future mailboxes,\nor list specific mailboxes in `scope.mailbox_ids`.", "method": "POST", "path": "/api/mail/v1/orders/{orderId}/api-tokens", "inputSchema": { "type": "object", "properties": { "orderId": { "type": "string", "description": "Order resource ID" }, "name": { "type": "string", "description": "Human-readable label for this token" }, "scope": { "type": "object", "description": "Mailbox scope this token can access", "properties": { "has_all_mailboxes": { "type": "boolean", "description": "Grant access to all current and future mailboxes of the order" }, "mailbox_ids": { "type": "array", "description": "Required when `has_all_mailboxes` is false. Mailbox resource IDs of this order.", "items": { "type": "string", "description": "mailbox_ids parameter" } } }, "required": [ "has_all_mailboxes" ] } }, "required": [ "orderId", "name", "scope" ] }, "security": [ { "apiToken": [] } ], "group": "mail" }, { "name": "mail_api-tokens_revoke", "title": "Revoke API token", "annotations": { "title": "Revoke API token", "readOnlyHint": false, "destructiveHint": true, "idempotentHint": true }, "description": "Revoke an API token. The token immediately loses access to the\n[Hostinger Email API](https://api.mail.hostinger.com/). This action\ncannot be undone.", "method": "DELETE", "path": "/api/mail/v1/api-tokens/{tokenId}", "inputSchema": { "type": "object", "properties": { "tokenId": { "type": "string", "description": "API token ID (returned when the token was created)" } }, "required": [ "tokenId" ] }, "security": [ { "apiToken": [] } ], "group": "mail" }, { "name": "mail_api-tokens_list", "title": "List API tokens", "annotations": { "title": "List API tokens", "readOnlyHint": true, "destructiveHint": false }, "description": "Retrieve a paginated list of\n[Hostinger Email API](https://api.mail.hostinger.com/) tokens across\nall your mail orders, optionally filtered by order. Plaintext tokens\nare never included; they are returned only when a token is created.", "method": "GET", "path": "/api/mail/v1/api-tokens", "inputSchema": { "type": "object", "properties": { "order_id": { "type": "string", "description": "Filter tokens by order resource ID. Single value or comma-separated list." }, "page": { "type": "integer", "description": "Page number" }, "per_page": { "type": "integer", "description": "Number of items per page" } }, "required": [] }, "security": [ { "apiToken": [] } ], "group": "mail" }, { "name": "mail_autoreplies_create", "title": "Create autoreply", "annotations": { "title": "Create autoreply", "readOnlyHint": false, "destructiveHint": false }, "description": "Create an automatic reply for the given mailbox. A mailbox can have\nonly one autoreply. Omit `starts_at` to activate the autoreply\nimmediately and omit `ends_at` to keep it active indefinitely.", "method": "POST", "path": "/api/mail/v1/mailboxes/{mailboxId}/autoreplies", "inputSchema": { "type": "object", "properties": { "mailboxId": { "type": "string", "description": "Mailbox resource ID" }, "subject": { "type": "string", "description": "Subject of the automatic reply" }, "body": { "type": "string", "description": "Body of the automatic reply" }, "display_name": { "type": "string", "description": "Sender display name used for the reply" }, "starts_at": { "type": "string", "description": "When the autoreply becomes active. Defaults to now." }, "ends_at": { "type": "string", "description": "When the autoreply stops. Omit for an indefinite autoreply." } }, "required": [ "mailboxId", "subject", "body" ] }, "security": [ { "apiToken": [] } ], "group": "mail" }, { "name": "mail_autoreplies_update", "title": "Update autoreply", "annotations": { "title": "Update autoreply", "readOnlyHint": false, "destructiveHint": true, "idempotentHint": true }, "description": "Replace the autoreply with the given content and schedule. Omitted\noptional fields are cleared: omit `starts_at` to activate the\nautoreply immediately and omit `ends_at` to keep it active\nindefinitely.", "method": "PUT", "path": "/api/mail/v1/autoreplies/{autoreplyId}", "inputSchema": { "type": "object", "properties": { "autoreplyId": { "type": "string", "description": "Autoreply resource ID" }, "subject": { "type": "string", "description": "Subject of the automatic reply" }, "body": { "type": "string", "description": "Body of the automatic reply" }, "display_name": { "type": "string", "description": "Sender display name used for the reply" }, "starts_at": { "type": "string", "description": "When the autoreply becomes active. Defaults to now." }, "ends_at": { "type": "string", "description": "When the autoreply stops. Omit for an indefinite autoreply." } }, "required": [ "autoreplyId", "subject", "body" ] }, "security": [ { "apiToken": [] } ], "group": "mail" }, { "name": "mail_autoreplies_delete", "title": "Delete autoreply", "annotations": { "title": "Delete autoreply", "readOnlyHint": false, "destructiveHint": true, "idempotentHint": true }, "description": "Delete the autoreply of a mailbox. The mailbox stops sending\nautomatic replies immediately.", "method": "DELETE", "path": "/api/mail/v1/autoreplies/{autoreplyId}", "inputSchema": { "type": "object", "properties": { "autoreplyId": { "type": "string", "description": "Autoreply resource ID" } }, "required": [ "autoreplyId" ] }, "security": [ { "apiToken": [] } ], "group": "mail" }, { "name": "mail_autoreplies_list", "title": "List autoreplies", "annotations": { "title": "List autoreplies", "readOnlyHint": true, "destructiveHint": false }, "description": "Retrieve a paginated list of autoreplies across all mailboxes of a\nmail order.", "method": "GET", "path": "/api/mail/v1/orders/{orderId}/autoreplies", "inputSchema": { "type": "object", "properties": { "orderId": { "type": "string", "description": "Order resource ID" }, "page": { "type": "integer", "description": "Page number" }, "per_page": { "type": "integer", "description": "Number of items per page" } }, "required": [ "orderId" ] }, "security": [ { "apiToken": [] } ], "group": "mail" }, { "name": "mail_catchalls_create-catch-all", "title": "Create catch-all", "annotations": { "title": "Create catch-all", "readOnlyHint": false, "destructiveHint": false }, "description": "Create a catch-all that routes all messages sent to unknown addresses\nof the domain to the given mailbox. The mailbox address receives a\nconfirmation email and the catch-all becomes active only after it is\nconfirmed. A domain can have only one catch-all.", "method": "POST", "path": "/api/mail/v1/mailboxes/{mailboxId}/catchalls", "inputSchema": { "type": "object", "properties": { "mailboxId": { "type": "string", "description": "Mailbox resource ID" } }, "required": [ "mailboxId" ] }, "security": [ { "apiToken": [] } ], "group": "mail" }, { "name": "mail_catchalls_delete-catch-all", "title": "Delete catch-all", "annotations": { "title": "Delete catch-all", "readOnlyHint": false, "destructiveHint": true, "idempotentHint": true }, "description": "Delete a catch-all. Messages sent to unknown addresses of the domain\nare no longer routed to the mailbox.", "method": "DELETE", "path": "/api/mail/v1/catchalls/{catchallId}", "inputSchema": { "type": "object", "properties": { "catchallId": { "type": "string", "description": "Catch-all resource ID" } }, "required": [ "catchallId" ] }, "security": [ { "apiToken": [] } ], "group": "mail" }, { "name": "mail_catchalls_list-catch-alls", "title": "List catch-alls", "annotations": { "title": "List catch-alls", "readOnlyHint": true, "destructiveHint": false }, "description": "Retrieve a paginated list of catch-alls across all mailboxes of a\nmail order.", "method": "GET", "path": "/api/mail/v1/orders/{orderId}/catchalls", "inputSchema": { "type": "object", "properties": { "orderId": { "type": "string", "description": "Order resource ID" }, "page": { "type": "integer", "description": "Page number" }, "per_page": { "type": "integer", "description": "Number of items per page" } }, "required": [ "orderId" ] }, "security": [ { "apiToken": [] } ], "group": "mail" }, { "name": "mail_catchalls_resend-catch-all-confirmation", "title": "Resend catch-all confirmation", "annotations": { "title": "Resend catch-all confirmation", "readOnlyHint": false, "destructiveHint": false }, "description": "Resend the confirmation email to the mailbox address of an\nunconfirmed catch-all.", "method": "POST", "path": "/api/mail/v1/catchalls/{catchallId}/confirmation/resend", "inputSchema": { "type": "object", "properties": { "catchallId": { "type": "string", "description": "Catch-all resource ID" } }, "required": [ "catchallId" ] }, "security": [ { "apiToken": [] } ], "group": "mail" }, { "name": "mail_forwarders_create", "title": "Create forwarder", "annotations": { "title": "Create forwarder", "readOnlyHint": false, "destructiveHint": false }, "description": "Create a forwarder from the given mailbox to the destination address.\nThe destination receives a confirmation email and forwarding becomes\nactive only after it is confirmed.", "method": "POST", "path": "/api/mail/v1/mailboxes/{mailboxId}/forwarders", "inputSchema": { "type": "object", "properties": { "mailboxId": { "type": "string", "description": "Mailbox resource ID" }, "destination": { "type": "string", "description": "Email address the messages will be forwarded to" }, "is_keep_copy_enabled": { "type": "boolean", "description": "Whether to keep a copy of forwarded messages in the mailbox. Defaults to false." } }, "required": [ "mailboxId", "destination" ] }, "security": [ { "apiToken": [] } ], "group": "mail" }, { "name": "mail_forwarders_delete", "title": "Delete forwarder", "annotations": { "title": "Delete forwarder", "readOnlyHint": false, "destructiveHint": true, "idempotentHint": true }, "description": "Delete a forwarder. The mailbox stops forwarding messages to the\ndestination address immediately.", "method": "DELETE", "path": "/api/mail/v1/forwarders/{forwarderId}", "inputSchema": { "type": "object", "properties": { "forwarderId": { "type": "string", "description": "Forwarder resource ID" } }, "required": [ "forwarderId" ] }, "security": [ { "apiToken": [] } ], "group": "mail" }, { "name": "mail_forwarders_list", "title": "List forwarders", "annotations": { "title": "List forwarders", "readOnlyHint": true, "destructiveHint": false }, "description": "Retrieve a paginated list of forwarders across all mailboxes of a\nmail order.", "method": "GET", "path": "/api/mail/v1/orders/{orderId}/forwarders", "inputSchema": { "type": "object", "properties": { "orderId": { "type": "string", "description": "Order resource ID" }, "page": { "type": "integer", "description": "Page number" }, "per_page": { "type": "integer", "description": "Number of items per page" } }, "required": [ "orderId" ] }, "security": [ { "apiToken": [] } ], "group": "mail" }, { "name": "mail_forwarders_resend-confirmation", "title": "Resend forwarder confirmation", "annotations": { "title": "Resend forwarder confirmation", "readOnlyHint": false, "destructiveHint": false }, "description": "Resend the confirmation email to the destination address of an\nunconfirmed forwarder.", "method": "POST", "path": "/api/mail/v1/forwarders/{forwarderId}/confirmation/resend", "inputSchema": { "type": "object", "properties": { "forwarderId": { "type": "string", "description": "Forwarder resource ID" } }, "required": [ "forwarderId" ] }, "security": [ { "apiToken": [] } ], "group": "mail" }, { "name": "mail_forwarders_update-keep-copy-setting", "title": "Update forwarder keep-copy setting", "annotations": { "title": "Update forwarder keep-copy setting", "readOnlyHint": false, "destructiveHint": true, "idempotentHint": true }, "description": "Enable or disable keeping a copy of forwarded messages in the\nmailbox.", "method": "PATCH", "path": "/api/mail/v1/forwarders/{forwarderId}/keep-copy", "inputSchema": { "type": "object", "properties": { "forwarderId": { "type": "string", "description": "Forwarder resource ID" }, "is_keep_copy_enabled": { "type": "boolean", "description": "Whether to keep a copy of forwarded messages in the mailbox" } }, "required": [ "forwarderId", "is_keep_copy_enabled" ] }, "security": [ { "apiToken": [] } ], "group": "mail" }, { "name": "mail_logs_list-access", "title": "List access logs", "annotations": { "title": "List access logs", "readOnlyHint": true, "destructiveHint": false }, "description": "Retrieve paginated access logs for the domain attached to the given\nmail order. Supports filtering by account, date range, protocol,\nstatus, and deletion flag. Results are sorted by timestamp descending.", "method": "GET", "path": "/api/mail/v1/orders/{orderId}/logs/access", "inputSchema": { "type": "object", "properties": { "orderId": { "type": "string", "description": "Order resource ID" }, "account": { "type": "string", "description": "Filter log entries by a specific email account" }, "date": { "type": "string", "description": "Exact date filter (YYYY-MM-DD). Takes precedence over `from_date`/`to_date` when both are given." }, "from_date": { "type": "string", "description": "Date range start (RFC 3339)" }, "to_date": { "type": "string", "description": "Date range end (RFC 3339)" }, "status": { "type": "string", "description": "Filter log entries by status", "enum": [ "Successful", "Failed" ] }, "protocol": { "type": "string", "description": "Filter access log entries by protocol", "enum": [ "imap", "pop3", "smtp" ] }, "has_deletions": { "type": "boolean", "description": "Filter access log entries by whether the session had deletions" }, "page": { "type": "integer", "description": "Page number" }, "per_page": { "type": "integer", "description": "Number of items per page" } }, "required": [ "orderId" ] }, "security": [ { "apiToken": [] } ], "group": "mail" }, { "name": "mail_logs_list-action", "title": "List action logs", "annotations": { "title": "List action logs", "readOnlyHint": true, "destructiveHint": false }, "description": "Retrieve paginated account action logs (administrative and user\nactions) for the given mail order. Supports filtering by account,\ndate range, and status. Results are sorted by timestamp descending.", "method": "GET", "path": "/api/mail/v1/orders/{orderId}/logs/action", "inputSchema": { "type": "object", "properties": { "orderId": { "type": "string", "description": "Order resource ID" }, "account": { "type": "string", "description": "Filter log entries by a specific email account" }, "date": { "type": "string", "description": "Exact date filter (YYYY-MM-DD). Takes precedence over `from_date`/`to_date` when both are given." }, "from_date": { "type": "string", "description": "Date range start (RFC 3339)" }, "to_date": { "type": "string", "description": "Date range end (RFC 3339)" }, "status": { "type": "string", "description": "Filter log entries by status", "enum": [ "Successful", "Failed" ] }, "page": { "type": "integer", "description": "Page number" }, "per_page": { "type": "integer", "description": "Number of items per page" } }, "required": [ "orderId" ] }, "security": [ { "apiToken": [] } ], "group": "mail" }, { "name": "mail_logs_list-inbound", "title": "List inbound logs", "annotations": { "title": "List inbound logs", "readOnlyHint": true, "destructiveHint": false }, "description": "Retrieve paginated inbound (received mail) delivery logs for the\ndomain attached to the given mail order. Supports filtering by\naccount, date range, status, sender, and recipient. Results are\nsorted by timestamp descending.", "method": "GET", "path": "/api/mail/v1/orders/{orderId}/logs/inbound", "inputSchema": { "type": "object", "properties": { "orderId": { "type": "string", "description": "Order resource ID" }, "account": { "type": "string", "description": "Filter log entries by a specific email account" }, "date": { "type": "string", "description": "Exact date filter (YYYY-MM-DD). Takes precedence over `from_date`/`to_date` when both are given." }, "from_date": { "type": "string", "description": "Date range start (RFC 3339)" }, "to_date": { "type": "string", "description": "Date range end (RFC 3339)" }, "status": { "type": "string", "description": "Filter log entries by status", "enum": [ "Successful", "Failed" ] }, "sender": { "type": "string", "description": "Filter log entries by sender. Accepts a full email address or a domain." }, "recipient": { "type": "string", "description": "Filter log entries by recipient. Accepts a full email address or a domain." }, "page": { "type": "integer", "description": "Page number" }, "per_page": { "type": "integer", "description": "Number of items per page" } }, "required": [ "orderId" ] }, "security": [ { "apiToken": [] } ], "group": "mail" }, { "name": "mail_logs_list-mailbox-action", "title": "List mailbox action logs", "annotations": { "title": "List mailbox action logs", "readOnlyHint": true, "destructiveHint": false }, "description": "Retrieve paginated mailbox action logs (message and mailbox events)\nfor a mailbox in the given mail order. The mailbox email must belong\nto the order's domain. Supports date range and event type filters.\nResults are sorted by timestamp descending.", "method": "GET", "path": "/api/mail/v1/orders/{orderId}/logs/mailbox-actions", "inputSchema": { "type": "object", "properties": { "orderId": { "type": "string", "description": "Order resource ID" }, "email": { "type": "string", "description": "Mailbox email address. Must belong to the order's domain." }, "date": { "type": "string", "description": "Exact date filter (YYYY-MM-DD). Takes precedence over `from_date`/`to_date` when both are given." }, "from_date": { "type": "string", "description": "Date range start (RFC 3339)" }, "to_date": { "type": "string", "description": "Date range end (RFC 3339)" }, "event": { "type": "string", "description": "Filter mailbox action log entries by event type", "enum": [ "MessageNew", "MessageRead", "MessageAppend", "MessageExpunge", "MailboxCreate", "MailboxDelete", "MailboxRename" ] }, "page": { "type": "integer", "description": "Page number" }, "per_page": { "type": "integer", "description": "Number of items per page" } }, "required": [ "orderId", "email" ] }, "security": [ { "apiToken": [] } ], "group": "mail" }, { "name": "mail_logs_list-outbound", "title": "List outbound logs", "annotations": { "title": "List outbound logs", "readOnlyHint": true, "destructiveHint": false }, "description": "Retrieve paginated outbound (sent mail) delivery logs for the domain\nattached to the given mail order. Supports filtering by account, date\nrange, status, sender, and recipient. Results are sorted by timestamp\ndescending.", "method": "GET", "path": "/api/mail/v1/orders/{orderId}/logs/outbound", "inputSchema": { "type": "object", "properties": { "orderId": { "type": "string", "description": "Order resource ID" }, "account": { "type": "string", "description": "Filter log entries by a specific email account" }, "date": { "type": "string", "description": "Exact date filter (YYYY-MM-DD). Takes precedence over `from_date`/`to_date` when both are given." }, "from_date": { "type": "string", "description": "Date range start (RFC 3339)" }, "to_date": { "type": "string", "description": "Date range end (RFC 3339)" }, "status": { "type": "string", "description": "Filter log entries by status", "enum": [ "Successful", "Failed" ] }, "sender": { "type": "string", "description": "Filter log entries by sender. Accepts a full email address or a domain." }, "recipient": { "type": "string", "description": "Filter log entries by recipient. Accepts a full email address or a domain." }, "page": { "type": "integer", "description": "Page number" }, "per_page": { "type": "integer", "description": "Number of items per page" } }, "required": [ "orderId" ] }, "security": [ { "apiToken": [] } ], "group": "mail" }, { "name": "mail_mailboxes_list", "title": "List mailboxes", "annotations": { "title": "List mailboxes", "readOnlyHint": true, "destructiveHint": false }, "description": "Retrieve a paginated list of mailboxes belonging to a mail order.\n\nUse this endpoint to monitor mailboxes of your mail service, including\ntheir status, enabled protocols, attached resource counts, and\nperiodically synced usage numbers (usage may lag behind live values).", "method": "GET", "path": "/api/mail/v1/orders/{orderId}/mailboxes", "inputSchema": { "type": "object", "properties": { "orderId": { "type": "string", "description": "Order resource ID" }, "search": { "type": "string", "description": "Filter mailboxes whose email address contains the given string" }, "sort": { "type": "string", "description": "Sort mailboxes by field. Prefix with `-` for descending order.", "enum": [ "address", "-address" ] }, "page": { "type": "integer", "description": "Page number" }, "per_page": { "type": "integer", "description": "Number of items per page" } }, "required": [ "orderId" ] }, "security": [ { "apiToken": [] } ], "group": "mail" }, { "name": "mail_mailboxes_create-mailbox", "title": "Create mailbox", "annotations": { "title": "Create mailbox", "readOnlyHint": false, "destructiveHint": false }, "description": "Create a mailbox under the given mail order. The full email address is\ncomposed from the given local part and the domain of the order.", "method": "POST", "path": "/api/mail/v1/orders/{orderId}/mailboxes", "inputSchema": { "type": "object", "properties": { "orderId": { "type": "string", "description": "Order resource ID" }, "local_part": { "type": "string", "description": "Local part of the mailbox address (the part before the @). The domain is taken from the order. Must start and end with a letter or digit; single dots, underscores and hyphens are allowed in between." }, "password": { "type": "string", "description": "Mailbox password. Minimum 8 characters with uppercase, lowercase, number and special character." } }, "required": [ "orderId", "local_part", "password" ] }, "security": [ { "apiToken": [] } ], "group": "mail" }, { "name": "mail_mailboxes_delete-mailbox", "title": "Delete mailbox", "annotations": { "title": "Delete mailbox", "readOnlyHint": false, "destructiveHint": true, "idempotentHint": true }, "description": "Delete a mailbox. The mailbox is soft-deleted and stays restorable\nfor a limited period before it is permanently removed.", "method": "DELETE", "path": "/api/mail/v1/mailboxes/{mailboxId}", "inputSchema": { "type": "object", "properties": { "mailboxId": { "type": "string", "description": "Mailbox resource ID" } }, "required": [ "mailboxId" ] }, "security": [ { "apiToken": [] } ], "group": "mail" }, { "name": "mail_mailboxes_change-mailbox-password", "title": "Change mailbox password", "annotations": { "title": "Change mailbox password", "readOnlyHint": false, "destructiveHint": true, "idempotentHint": true }, "description": "Change the password of a mailbox.", "method": "PATCH", "path": "/api/mail/v1/mailboxes/{mailboxId}/password", "inputSchema": { "type": "object", "properties": { "mailboxId": { "type": "string", "description": "Mailbox resource ID" }, "password": { "type": "string", "description": "New mailbox password. Minimum 8 characters with uppercase, lowercase, number and special character; must not be a commonly used password." } }, "required": [ "mailboxId", "password" ] }, "security": [ { "apiToken": [] } ], "group": "mail" }, { "name": "mail_orders_list", "title": "List orders", "annotations": { "title": "List orders", "readOnlyHint": true, "destructiveHint": false }, "description": "Retrieve a paginated list of mail orders associated with your account.\n\nUse this endpoint to monitor your mail services, including their status,\nplan, attached domain, and expiration details.", "method": "GET", "path": "/api/mail/v1/orders", "inputSchema": { "type": "object", "properties": { "domain": { "type": "string", "description": "Filter orders by domain name (exact match)" }, "status": { "type": "string", "description": "Filter orders by status", "enum": [ "pending_setup", "active", "suspended" ] }, "is_trial": { "type": "boolean", "description": "Filter orders by trial state" }, "sort": { "type": "string", "description": "Sort orders by field. Prefix with `-` for descending order.", "enum": [ "created_at", "-created_at", "expires_at", "-expires_at" ] }, "page": { "type": "integer", "description": "Page number" }, "per_page": { "type": "integer", "description": "Number of items per page" } }, "required": [] }, "security": [ { "apiToken": [] } ], "group": "mail" }, { "name": "mail_orders_plan", "title": "Get order plan", "annotations": { "title": "Get order plan", "readOnlyHint": true, "destructiveHint": false }, "description": "Retrieve the plan the given mail order was purchased with, including\ndomain-level and mailbox-level quotas, limits, and protocol\navailability.", "method": "GET", "path": "/api/mail/v1/orders/{orderId}/plan", "inputSchema": { "type": "object", "properties": { "orderId": { "type": "string", "description": "Order resource ID" } }, "required": [ "orderId" ] }, "security": [ { "apiToken": [] } ], "group": "mail" }, { "name": "mail_webhooks_create", "title": "Create webhook", "annotations": { "title": "Create webhook", "readOnlyHint": false, "destructiveHint": false }, "description": "Create a webhook for the given mailbox. The generated secret is\nreturned only in this response and is sent as a bearer token with\nevery delivery.", "method": "POST", "path": "/api/mail/v1/mailboxes/{mailboxId}/webhooks", "inputSchema": { "type": "object", "properties": { "mailboxId": { "type": "string", "description": "Mailbox resource ID" }, "name": { "type": "string", "description": "Human-readable name for this webhook" }, "description": { "type": "string", "description": "Optional description of the webhook's purpose" }, "events": { "type": "array", "description": "Events that trigger this webhook", "items": { "type": "string", "description": "events parameter", "enum": [ "message.received" ] } }, "status": { "type": "string", "description": "Initial status of the webhook", "enum": [ "active", "disabled", "paused" ] }, "url": { "type": "string", "description": "Publicly reachable URL that receives the webhook POST requests" } }, "required": [ "mailboxId", "name", "events", "url" ] }, "security": [ { "apiToken": [] } ], "group": "mail" }, { "name": "mail_webhooks_list-delivery-logs", "title": "List webhook delivery logs", "annotations": { "title": "List webhook delivery logs", "readOnlyHint": true, "destructiveHint": false }, "description": "Retrieve a paginated list of webhook delivery logs for the given mail\norder, including delivery outcome, duration, and retry counts.\nSupports filtering by mailbox.", "method": "GET", "path": "/api/mail/v1/orders/{orderId}/webhooks/delivery-logs", "inputSchema": { "type": "object", "properties": { "orderId": { "type": "string", "description": "Order resource ID" }, "mailbox_id": { "type": "string", "description": "Filter by the mailbox resource ID the webhooks are attached to" }, "page": { "type": "integer", "description": "Page number" }, "per_page": { "type": "integer", "description": "Number of items per page" } }, "required": [ "orderId" ] }, "security": [ { "apiToken": [] } ], "group": "mail" }, { "name": "mail_webhooks_get", "title": "Get webhook", "annotations": { "title": "Get webhook", "readOnlyHint": true, "destructiveHint": false }, "description": "Retrieve the details of a single webhook. The webhook secret is never\nincluded; it is returned only when a webhook is created or its secret\nis regenerated.", "method": "GET", "path": "/api/mail/v1/webhooks/{webhookId}", "inputSchema": { "type": "object", "properties": { "webhookId": { "type": "string", "description": "Webhook ID (returned when the webhook was created)" } }, "required": [ "webhookId" ] }, "security": [ { "apiToken": [] } ], "group": "mail" }, { "name": "mail_webhooks_delete", "title": "Delete webhook", "annotations": { "title": "Delete webhook", "readOnlyHint": false, "destructiveHint": true, "idempotentHint": true }, "description": "Permanently delete a webhook. This action cannot be undone. After\ndeletion the URL no longer receives event notifications.", "method": "DELETE", "path": "/api/mail/v1/webhooks/{webhookId}", "inputSchema": { "type": "object", "properties": { "webhookId": { "type": "string", "description": "Webhook ID (returned when the webhook was created)" } }, "required": [ "webhookId" ] }, "security": [ { "apiToken": [] } ], "group": "mail" }, { "name": "mail_webhooks_update", "title": "Update webhook", "annotations": { "title": "Update webhook", "readOnlyHint": false, "destructiveHint": true, "idempotentHint": true }, "description": "Partially update a webhook. Only the fields included in the request\nbody are changed; omitted fields retain their current values. Pass\n`\"description\": null` to clear the description.", "method": "PATCH", "path": "/api/mail/v1/webhooks/{webhookId}", "inputSchema": { "type": "object", "properties": { "webhookId": { "type": "string", "description": "Webhook ID (returned when the webhook was created)" }, "name": { "type": "string", "description": "New human-readable name for the webhook" }, "description": { "type": "string", "description": "New description, or null to clear it" }, "events": { "type": "array", "description": "Replaces the full list of subscribed events", "items": { "type": "string", "description": "events parameter", "enum": [ "message.received" ] } }, "status": { "type": "string", "description": "New status for the webhook", "enum": [ "active", "disabled", "paused" ] }, "url": { "type": "string", "description": "New URL to deliver events to" } }, "required": [ "webhookId" ] }, "security": [ { "apiToken": [] } ], "group": "mail" }, { "name": "mail_webhooks_list", "title": "List webhooks", "annotations": { "title": "List webhooks", "readOnlyHint": true, "destructiveHint": false }, "description": "Retrieve a paginated list of webhooks belonging to the given mail\norder. Supports filtering by mailbox and status. The webhook secret\nis never included; it is returned only when a webhook is created or\nits secret is regenerated.", "method": "GET", "path": "/api/mail/v1/orders/{orderId}/webhooks", "inputSchema": { "type": "object", "properties": { "orderId": { "type": "string", "description": "Order resource ID" }, "mailbox_id": { "type": "string", "description": "Filter by the mailbox resource ID the webhooks are attached to" }, "status": { "type": "string", "description": "Filter webhooks by status", "enum": [ "active", "disabled", "paused" ] }, "page": { "type": "integer", "description": "Page number" }, "per_page": { "type": "integer", "description": "Number of items per page" } }, "required": [ "orderId" ] }, "security": [ { "apiToken": [] } ], "group": "mail" }, { "name": "mail_webhooks_regenerate-secret", "title": "Regenerate webhook secret", "annotations": { "title": "Regenerate webhook secret", "readOnlyHint": false, "destructiveHint": false }, "description": "Regenerate the secret of a webhook. The previous secret is\nimmediately invalidated. The new secret is returned only in this\nresponse and is sent as a bearer token with every delivery.", "method": "POST", "path": "/api/mail/v1/webhooks/{webhookId}/regenerate-secret", "inputSchema": { "type": "object", "properties": { "webhookId": { "type": "string", "description": "Webhook ID (returned when the webhook was created)" } }, "required": [ "webhookId" ] }, "security": [ { "apiToken": [] } ], "group": "mail" }, { "name": "mail_webhooks_test", "title": "Test webhook", "annotations": { "title": "Test webhook", "readOnlyHint": false, "destructiveHint": false }, "description": "Send a test delivery to the webhook URL and return the result. Test\nrequests are rate limited upstream.", "method": "POST", "path": "/api/mail/v1/webhooks/{webhookId}/test", "inputSchema": { "type": "object", "properties": { "webhookId": { "type": "string", "description": "Webhook ID (returned when the webhook was created)" } }, "required": [ "webhookId" ] }, "security": [ { "apiToken": [] } ], "group": "mail" }, { "name": "reach_automations_get", "title": "Get automation details", "annotations": { "title": "Get automation details", "readOnlyHint": true, "destructiveHint": false }, "description": "Get a single automation with the counts of contacts that entered it, are moving through it,\nfinished it or failed on the way.\n\nThis describes the automation itself. To see the workflow it runs, use the steps endpoint.", "method": "GET", "path": "/api/reach/v1/profiles/{profileUuid}/automations/{automationUuid}", "inputSchema": { "type": "object", "properties": { "profileUuid": { "type": "string", "description": "Profile uuid parameter" }, "automationUuid": { "type": "string", "description": "Automation uuid parameter" } }, "required": [ "profileUuid", "automationUuid" ] }, "security": [ { "apiToken": [] } ], "group": "reach" }, { "name": "reach_automations_list", "title": "List automations", "annotations": { "title": "List automations", "readOnlyHint": true, "destructiveHint": false }, "description": "Get a paginated list of the automations in a profile.\n\nEvery automation comes with the counts of contacts that entered it, are moving through it,\nfinished it or failed on the way. Those counts describe the contact journey and are not\nemail engagement metrics - for opens, clicks and unsubscribes use the campaign statistics\nendpoint instead.", "method": "GET", "path": "/api/reach/v1/profiles/{profileUuid}/automations", "inputSchema": { "type": "object", "properties": { "profileUuid": { "type": "string", "description": "Profile uuid parameter" }, "status": { "type": "string", "description": "Filter automations by status.\n\nThere is no `completed` status. An automation that has finished for every contact still\nreports `active`.", "enum": [ "active", "paused", "draft" ] }, "sort_direction": { "type": "string", "description": "Order automations by creation date. Newest first unless set to `asc`.", "enum": [ "asc", "desc" ] }, "page": { "type": "integer", "description": "Page number" }, "per_page": { "type": "integer", "description": "Number of items per page" } }, "required": [ "profileUuid" ] }, "security": [ { "apiToken": [] } ], "group": "reach" }, { "name": "reach_automations_list-steps", "title": "List automation steps", "annotations": { "title": "List automation steps", "readOnlyHint": true, "destructiveHint": false }, "description": "Get the workflow of an automation as a flat list of steps.\n\nThe steps form a tree rather than a straight line: follow `parent_uuid` to reconstruct the\nbranches, and use `step_order` to order the steps that share a parent. An automation with no\nsteps yet returns an empty list.", "method": "GET", "path": "/api/reach/v1/profiles/{profileUuid}/automations/{automationUuid}/steps", "inputSchema": { "type": "object", "properties": { "profileUuid": { "type": "string", "description": "Profile uuid parameter" }, "automationUuid": { "type": "string", "description": "Automation uuid parameter" } }, "required": [ "profileUuid", "automationUuid" ] }, "security": [ { "apiToken": [] } ], "group": "reach" }, { "name": "reach_campaigns_get", "title": "Get campaign details", "annotations": { "title": "Get campaign details", "readOnlyHint": true, "destructiveHint": false }, "description": "Get a single campaign with its sender, subject, template reference, targeting and delivery\nprogress.\n\nThis describes how the campaign was set up and how far it has got. For opens, clicks and\nunsubscribes use the campaign statistics endpoint.", "method": "GET", "path": "/api/reach/v1/profiles/{profileUuid}/campaigns/{campaignUuid}", "inputSchema": { "type": "object", "properties": { "profileUuid": { "type": "string", "description": "Profile uuid parameter" }, "campaignUuid": { "type": "string", "description": "Campaign uuid parameter" } }, "required": [ "profileUuid", "campaignUuid" ] }, "security": [ { "apiToken": [] } ], "group": "reach" }, { "name": "reach_campaigns_list", "title": "List campaigns", "annotations": { "title": "List campaigns", "readOnlyHint": true, "destructiveHint": false }, "description": "Get a paginated list of the campaigns in a profile.\n\nEach campaign carries its headline engagement rates. Filter by status to find drafts,\nscheduled, sending or sent campaigns, keeping in mind that a fully sent campaign has the\nstatus `publish`. By default only regular campaigns are returned - pass `type` to get the\nemails sent by automations or the double opt-in confirmations instead.", "method": "GET", "path": "/api/reach/v1/profiles/{profileUuid}/campaigns", "inputSchema": { "type": "object", "properties": { "profileUuid": { "type": "string", "description": "Profile uuid parameter" }, "status": { "type": "string", "description": "Filter campaigns by status.\n\nA fully sent campaign has the status `publish`. There is no `sent` status, and campaigns can\nbe neither paused nor archived.", "enum": [ "draft", "scheduled", "sending", "publish", "failed" ] }, "type": { "type": "string", "description": "Filter campaigns by type.\n\nDefaults to `campaign`, which leaves out the emails sent by automations and the double\nopt-in confirmations.", "enum": [ "campaign", "automation", "double_opt_in" ] }, "sort_direction": { "type": "string", "description": "Order campaigns by creation date. Newest first unless set to `asc`.", "enum": [ "asc", "desc" ] }, "page": { "type": "integer", "description": "Page number" }, "per_page": { "type": "integer", "description": "Number of items per page" } }, "required": [ "profileUuid" ] }, "security": [ { "apiToken": [] } ], "group": "reach" }, { "name": "reach_campaigns_create-draft", "title": "Create a draft campaign", "annotations": { "title": "Create a draft campaign", "readOnlyHint": false, "destructiveHint": false }, "description": "Create a campaign in a profile.\n\nThe campaign is created as a draft, so nothing is sent and no contact is touched. It has no\naudience yet either - targeting and scheduling are not part of this request, the draft is\nfinished and sent from the Reach interface.", "method": "POST", "path": "/api/reach/v1/profiles/{profileUuid}/campaigns", "inputSchema": { "type": "object", "properties": { "profileUuid": { "type": "string", "description": "Profile uuid parameter" }, "sender_name": { "type": "string", "description": "From name shown to the recipients." }, "sender_email": { "type": "string", "description": "From address of the campaign. Its domain has to be verified on the profile before\nthe campaign can be sent." }, "title": { "type": "string", "description": "Name the campaign is listed under. Not shown to the recipients." }, "subject": { "type": "string", "description": "Subject line of the email." }, "template_uuid": { "type": "string", "description": "Template to send, as returned by the template endpoints. Can be left out and\nattached later, but the campaign cannot be sent without one." }, "metadata": { "type": "object", "description": "Extra campaign fields. Any key outside the listed ones is rejected.", "properties": { "preheader": { "type": "string", "description": "Preview text shown after the subject line in the inbox." }, "source": { "type": "string", "description": "Where the campaign was created from." } } } }, "required": [ "profileUuid", "sender_name", "sender_email" ] }, "security": [ { "apiToken": [] } ], "group": "reach" }, { "name": "reach_campaigns_performance", "title": "Get campaign performance", "annotations": { "title": "Get campaign performance", "readOnlyHint": true, "destructiveHint": false }, "description": "Get the performance of a campaign: delivery, opens, clicks and unsubscribes, with the\nmatching rates.\n\nEvery count is unique contacts rather than raw events, so a contact who opens the same email\nfive times is counted once.", "method": "GET", "path": "/api/reach/v1/profiles/{profileUuid}/campaigns/{campaignUuid}/statistics", "inputSchema": { "type": "object", "properties": { "profileUuid": { "type": "string", "description": "Profile uuid parameter" }, "campaignUuid": { "type": "string", "description": "Campaign uuid parameter" } }, "required": [ "profileUuid", "campaignUuid" ] }, "security": [ { "apiToken": [] } ], "group": "reach" }, { "name": "reach_contacts_delete", "title": "Delete a contact", "annotations": { "title": "Delete a contact", "readOnlyHint": false, "destructiveHint": true, "idempotentHint": true }, "description": "Delete a contact with the specified UUID.\n\nThis endpoint permanently removes a contact from the email marketing system.\n\n**Deprecated.** This endpoint cannot target a profile, so it always falls back to the\nclient's default profile and cannot delete contacts of any other profile. Use\n`DELETE /api/reach/v1/profiles/{profileUuid}/contacts/{contactUuid}` instead.", "method": "DELETE", "path": "/api/reach/v1/contacts/{uuid}", "inputSchema": { "type": "object", "properties": { "uuid": { "type": "string", "description": "UUID of the contact to delete" } }, "required": [ "uuid" ] }, "security": [ { "apiToken": [] } ], "group": "reach" }, { "name": "reach_contact-fields_delete", "title": "Delete a contact field", "annotations": { "title": "Delete a contact field", "readOnlyHint": false, "destructiveHint": true, "idempotentHint": true }, "description": "Delete a custom contact field.\n\nEvery value contacts hold for the field is deleted with it, and for the choice types so\nare its options. The contacts themselves are not affected.", "method": "DELETE", "path": "/api/reach/v1/profiles/{profileUuid}/contacts/fields/{fieldUuid}", "inputSchema": { "type": "object", "properties": { "profileUuid": { "type": "string", "description": "Profile uuid parameter" }, "fieldUuid": { "type": "string", "description": "Contact field uuid parameter" } }, "required": [ "profileUuid", "fieldUuid" ] }, "security": [ { "apiToken": [] } ], "group": "reach" }, { "name": "reach_contact-fields_update", "title": "Update a contact field", "annotations": { "title": "Update a contact field", "readOnlyHint": false, "destructiveHint": true, "idempotentHint": true }, "description": "Rename a custom contact field and, for the choice types, replace its option set.\n\nOptions carrying a uuid are kept and relabelled, options without one are created, and any\nexisting option left out of the list is deleted along with the values contacts hold for\nit. The field type and slug cannot be changed.", "method": "PATCH", "path": "/api/reach/v1/profiles/{profileUuid}/contacts/fields/{fieldUuid}", "inputSchema": { "type": "object", "properties": { "profileUuid": { "type": "string", "description": "Profile uuid parameter" }, "fieldUuid": { "type": "string", "description": "Contact field uuid parameter" }, "label": { "type": "string", "description": "label parameter" }, "options": { "type": "array", "description": "Replaces the option set when provided. Entries carrying a uuid are kept and relabelled, entries without one are created, and any existing option missing from the list is deleted along with the values contacts hold for it.", "items": { "type": "object", "description": "options parameter", "properties": { "uuid": { "type": "string", "description": "uuid parameter" }, "label": { "type": "string", "description": "label parameter" } }, "required": [ "label" ] } } }, "required": [ "profileUuid", "fieldUuid", "label" ] }, "security": [ { "apiToken": [] } ], "group": "reach" }, { "name": "reach_contact-fields_list", "title": "List contact fields", "annotations": { "title": "List contact fields", "readOnlyHint": true, "destructiveHint": false }, "description": "Get the custom contact fields defined in a profile.\n\nCustom fields let you store your own attributes on contacts. The returned uuids are what\nyou pass to the contact update endpoint to set values, and choice fields also list the\noptions available to pick from.", "method": "GET", "path": "/api/reach/v1/profiles/{profileUuid}/contacts/fields", "inputSchema": { "type": "object", "properties": { "profileUuid": { "type": "string", "description": "Profile uuid parameter" } }, "required": [ "profileUuid" ] }, "security": [ { "apiToken": [] } ], "group": "reach" }, { "name": "reach_contact-fields_create", "title": "Create a contact field", "annotations": { "title": "Create a contact field", "readOnlyHint": false, "destructiveHint": false }, "description": "Define a new custom contact field in a profile.\n\nThe `slug` is derived from the label and, like the field type, cannot be changed later.\nUse the returned uuid to set values on contacts.", "method": "POST", "path": "/api/reach/v1/profiles/{profileUuid}/contacts/fields", "inputSchema": { "type": "object", "properties": { "profileUuid": { "type": "string", "description": "Profile uuid parameter" }, "type": { "type": "string", "description": "Immutable once the field exists", "enum": [ "text", "number", "date", "single_choice", "multi_choice" ] }, "label": { "type": "string", "description": "label parameter" }, "options": { "type": "array", "description": "Required for single_choice and multi_choice, ignored for the scalar types. Labels must be unique regardless of casing.", "items": { "type": "string", "description": "options parameter" } } }, "required": [ "profileUuid", "type", "label" ] }, "security": [ { "apiToken": [] } ], "group": "reach" }, { "name": "reach_contacts_list-groups", "title": "List contact groups", "annotations": { "title": "List contact groups", "readOnlyHint": true, "destructiveHint": false }, "description": "Get a list of all contact groups.\n\nThis endpoint returns a list of contact groups that can be used to organize contacts.", "method": "GET", "path": "/api/reach/v1/contacts/groups", "inputSchema": { "type": "object", "properties": {}, "required": [] }, "security": [ { "apiToken": [] } ], "group": "reach" }, { "name": "reach_contacts_list", "title": "List contacts", "annotations": { "title": "List contacts", "readOnlyHint": true, "destructiveHint": false }, "description": "Get a list of contacts, optionally filtered by group and subscription status.\n\nThis endpoint returns a paginated list of contacts with their basic information.\nYou can filter contacts by group UUID and subscription status.\n\n**Deprecated.** This endpoint cannot target a profile, so it always falls back to the\nclient's default profile and cannot list contacts of any other profile. Use\n`GET /api/reach/v1/profiles/{profileUuid}/contacts` instead, which also replaces the\ngroup filter with a tag filter.", "method": "GET", "path": "/api/reach/v1/contacts", "inputSchema": { "type": "object", "properties": { "group_uuid": { "type": "string", "description": "Filter contacts by group UUID" }, "subscription_status": { "type": "string", "description": "Filter contacts by subscription status", "enum": [ "subscribed", "unsubscribed", "confirmed", "pending" ] }, "page": { "type": "integer", "description": "Page number" } }, "required": [] }, "security": [ { "apiToken": [] } ], "group": "reach" }, { "name": "reach_contacts_create", "title": "Create a new contact", "annotations": { "title": "Create a new contact", "readOnlyHint": false, "destructiveHint": false }, "description": "Create a new contact in the email marketing system.\n\nThis endpoint allows you to create a new contact with basic information like name, email, and surname.\n\nIf double opt-in is enabled,\nthe contact will be created with a pending status and a confirmation email will be sent.", "method": "POST", "path": "/api/reach/v1/contacts", "inputSchema": { "type": "object", "properties": { "email": { "type": "string", "description": "email parameter" }, "name": { "type": "string", "description": "name parameter" }, "surname": { "type": "string", "description": "surname parameter" }, "phone": { "type": "string", "description": "Phone number in E.164 format (leading \"+\" then 7-15 digits)" }, "note": { "type": "string", "description": "note parameter" }, "tag_uuids": { "type": "array", "description": "Existing tags to attach to the created contact", "items": { "type": "string", "description": "tag_uuids parameter" } } }, "required": [ "email" ] }, "security": [ { "apiToken": [] } ], "group": "reach" }, { "name": "reach_contacts_get", "title": "Get contact details", "annotations": { "title": "Get contact details", "readOnlyHint": true, "destructiveHint": false }, "description": "Get the full details of a single contact.\n\nAlongside the contact's own attributes this returns the tags assigned to it and the\nvalues it holds for the profile's custom contact fields.", "method": "GET", "path": "/api/reach/v1/profiles/{profileUuid}/contacts/{contactUuid}", "inputSchema": { "type": "object", "properties": { "profileUuid": { "type": "string", "description": "Profile uuid parameter" }, "contactUuid": { "type": "string", "description": "Contact uuid parameter" } }, "required": [ "profileUuid", "contactUuid" ] }, "security": [ { "apiToken": [] } ], "group": "reach" }, { "name": "reach_contacts_delete-profile", "title": "Delete a profile contact", "annotations": { "title": "Delete a profile contact", "readOnlyHint": false, "destructiveHint": true, "idempotentHint": true }, "description": "Permanently delete a contact from a profile.\n\nThe contact is removed together with its custom field values and tag assignments.", "method": "DELETE", "path": "/api/reach/v1/profiles/{profileUuid}/contacts/{contactUuid}", "inputSchema": { "type": "object", "properties": { "profileUuid": { "type": "string", "description": "Profile uuid parameter" }, "contactUuid": { "type": "string", "description": "Contact uuid parameter" } }, "required": [ "profileUuid", "contactUuid" ] }, "security": [ { "apiToken": [] } ], "group": "reach" }, { "name": "reach_contacts_update", "title": "Update a contact", "annotations": { "title": "Update a contact", "readOnlyHint": false, "destructiveHint": true, "idempotentHint": true }, "description": "Update a contact's attributes and custom field values.\n\nOnly the properties present in the request body are changed, so a partial body is enough\nto change a single attribute. Sending a property as `null` clears it.\n\nThe response carries the contact's core attributes. Read back its tags, custom field\nvalues, source and note with `GET /api/reach/v1/profiles/{profileUuid}/contacts/{contactUuid}`.", "method": "PATCH", "path": "/api/reach/v1/profiles/{profileUuid}/contacts/{contactUuid}", "inputSchema": { "type": "object", "properties": { "profileUuid": { "type": "string", "description": "Profile uuid parameter" }, "contactUuid": { "type": "string", "description": "Contact uuid parameter" }, "email": { "type": "string", "description": "email parameter" }, "name": { "type": "string", "description": "name parameter" }, "surname": { "type": "string", "description": "surname parameter" }, "phone": { "type": "string", "description": "Phone number in E.164 format (leading \"+\" then 7-15 digits)" }, "subscription_status": { "type": "string", "description": "subscription_status parameter", "enum": [ "subscribed", "unsubscribed", "confirmed", "pending" ] }, "note": { "type": "string", "description": "note parameter" }, "fields": { "type": "array", "description": "Set custom field values. Omit to leave untouched, send an empty array to clear them all.", "items": { "type": "object", "description": "fields parameter", "properties": { "uuid": { "type": "string", "description": "uuid parameter" }, "value": { "type": "string", "description": "For the scalar field types" }, "selected_option_uuids": { "type": "array", "description": "For the choice field types", "items": { "type": "string", "description": "selected_option_uuids parameter" } } }, "required": [ "uuid" ] } } }, "required": [ "profileUuid", "contactUuid" ] }, "security": [ { "apiToken": [] } ], "group": "reach" }, { "name": "reach_contacts_create-in-bulk", "title": "Create contacts in bulk", "annotations": { "title": "Create contacts in bulk", "readOnlyHint": false, "destructiveHint": false }, "description": "Create many contacts in a profile in a single call.\n\nThe contacts are imported in the background, so a success response means the import was\naccepted rather than finished. Contacts whose email already exists in the profile are\nleft as they are. If double opt-in is enabled, new contacts start off pending and are\nsent a confirmation email.", "method": "POST", "path": "/api/reach/v1/profiles/{profileUuid}/contacts/bulk", "inputSchema": { "type": "object", "properties": { "profileUuid": { "type": "string", "description": "Profile uuid parameter" }, "contacts": { "type": "array", "description": "contacts parameter", "items": { "type": "object", "description": "contacts parameter", "properties": { "email": { "type": "string", "description": "email parameter" }, "name": { "type": "string", "description": "name parameter" }, "surname": { "type": "string", "description": "surname parameter" }, "phone": { "type": "string", "description": "Phone number in E.164 format (leading \"+\" then 7-15 digits)" } }, "required": [ "email" ] } }, "tag_uuids": { "type": "array", "description": "Existing tags to attach to every created contact", "items": { "type": "string", "description": "tag_uuids parameter" } }, "note": { "type": "string", "description": "Note applied to every created contact" } }, "required": [ "profileUuid", "contacts" ] }, "security": [ { "apiToken": [] } ], "group": "reach" }, { "name": "reach_contacts_list-profile", "title": "List profile contacts", "annotations": { "title": "List profile contacts", "readOnlyHint": true, "destructiveHint": false }, "description": "Get a paginated list of contacts belonging to a profile.\n\nContacts can be filtered by subscription status, by tag, and by an email search term.\nThe `meta.total` field of the response is the number of contacts matching the filters,\nso calling this endpoint without filters gives the profile's total contact count.", "method": "GET", "path": "/api/reach/v1/profiles/{profileUuid}/contacts", "inputSchema": { "type": "object", "properties": { "profileUuid": { "type": "string", "description": "Profile uuid parameter" }, "subscription_status": { "type": "string", "description": "Filter contacts by subscription status", "enum": [ "subscribed", "unsubscribed", "confirmed", "pending" ] }, "tag_uuid": { "type": "string", "description": "Filter contacts by tag UUID" }, "search": { "type": "string", "description": "Search contacts by email" }, "page": { "type": "integer", "description": "Page number" }, "per_page": { "type": "integer", "description": "Number of items per page" } }, "required": [ "profileUuid" ] }, "security": [ { "apiToken": [] } ], "group": "reach" }, { "name": "reach_contacts_create-bulk", "title": "Create new contacts", "annotations": { "title": "Create new contacts", "readOnlyHint": false, "destructiveHint": false }, "description": "Create a new contact in the email marketing system.\n\nThis endpoint allows you to create a new contact with basic information like name, email, and surname.\n\nIf double opt-in is enabled, the contact will be created with a pending status\nand a confirmation email will be sent.", "method": "POST", "path": "/api/reach/v1/profiles/{profileUuid}/contacts", "inputSchema": { "type": "object", "properties": { "profileUuid": { "type": "string", "description": "Profile uuid parameter" }, "email": { "type": "string", "description": "email parameter" }, "name": { "type": "string", "description": "name parameter" }, "surname": { "type": "string", "description": "surname parameter" }, "phone": { "type": "string", "description": "Phone number in E.164 format (leading \"+\" then 7-15 digits)" }, "note": { "type": "string", "description": "note parameter" }, "tag_uuids": { "type": "array", "description": "Existing tags to attach to the created contact", "items": { "type": "string", "description": "tag_uuids parameter" } } }, "required": [ "profileUuid", "email" ] }, "security": [ { "apiToken": [] } ], "group": "reach" }, { "name": "reach_segments_list", "title": "List segments", "annotations": { "title": "List segments", "readOnlyHint": true, "destructiveHint": false }, "description": "Get a list of all contact segments.\n\nThis endpoint returns a list of contact segments that can be used to organize contacts.\n\n**Deprecated.** This endpoint cannot target a profile, so it always falls back to\nthe client's default profile and cannot list the segments of any other profile. Use\n`GET /api/reach/v1/profiles/{profileUuid}/segmentation/segments` instead.", "method": "GET", "path": "/api/reach/v1/segmentation/segments", "inputSchema": { "type": "object", "properties": {}, "required": [] }, "security": [ { "apiToken": [] } ], "group": "reach" }, { "name": "reach_segments_create", "title": "Create a new contact segment", "annotations": { "title": "Create a new contact segment", "readOnlyHint": false, "destructiveHint": false }, "description": "Create a new contact segment.\n\nThis endpoint allows creating a new contact segment that can be used to organize contacts.\nThe segment can be configured with specific criteria like email, name, subscription status, etc.\n\n**Deprecated.** This endpoint cannot target a profile, so it always falls back to\nthe client's default profile and cannot create segments in any other profile. Use\n`POST /api/reach/v1/profiles/{profileUuid}/segmentation/segments` instead.", "method": "POST", "path": "/api/reach/v1/segmentation/segments", "inputSchema": { "type": "object", "properties": { "name": { "type": "string", "description": "name parameter" }, "conditions": { "type": "array", "description": "conditions parameter", "items": { "type": "object", "description": "conditions parameter", "properties": { "operator": { "type": "string", "description": "operator parameter", "enum": [ "equals", "not_equals", "contains", "not_contains", "gte", "lte", "exists", "within_last_days", "not_within_last_days", "older_than_days", "processed", "not_processed", "delivered", "not_delivered", "dropped", "not_dropped", "bounced", "not_bounced", "soft_bounced", "not_soft_bounced", "opened", "not_opened", "clicked", "not_clicked", "unsubscribed", "not_unsubscribed" ] }, "value": { "type": "string", "description": "value parameter" }, "attribute": { "type": "string", "description": "attribute parameter", "enum": [ "note", "comment", "domain", "integration", "source", "name", "surname", "email", "subscribed_at", "unsubscribed_at", "subscription_status", "processed", "opened", "clicked", "delivered", "bounced", "unsubscribed", "dropped", "tag", "campaigns" ] } } } }, "logic": { "type": "string", "description": "logic parameter", "enum": [ "AND", "OR" ] } }, "required": [ "name", "conditions", "logic" ] }, "security": [ { "apiToken": [] } ], "group": "reach" }, { "name": "reach_segments_count-profile-contacts", "title": "Count profile segment contacts", "annotations": { "title": "Count profile segment contacts", "readOnlyHint": true, "destructiveHint": false }, "description": "Count the contacts currently matching a segment without listing them.\n\nCheaper than paging through the segment contacts endpoint when only the size is needed.", "method": "GET", "path": "/api/reach/v1/profiles/{profileUuid}/segmentation/segments/{segmentUuid}/count", "inputSchema": { "type": "object", "properties": { "profileUuid": { "type": "string", "description": "Profile uuid parameter" }, "segmentUuid": { "type": "string", "description": "Segment uuid parameter" } }, "required": [ "profileUuid", "segmentUuid" ] }, "security": [ { "apiToken": [] } ], "group": "reach" }, { "name": "reach_segments_list-profile-contacts", "title": "List profile segment contacts", "annotations": { "title": "List profile segment contacts", "readOnlyHint": true, "destructiveHint": false }, "description": "Retrieve contacts associated with a specific segment for a given profile.\n\nThis endpoint allows you to fetch and filter contacts that belong to a particular segment,\nidentified by its UUID, scoped to a specific profile.", "method": "GET", "path": "/api/reach/v1/profiles/{profileUuid}/segmentation/segments/{segmentUuid}/contacts", "inputSchema": { "type": "object", "properties": { "profileUuid": { "type": "string", "description": "Profile uuid parameter" }, "segmentUuid": { "type": "string", "description": "Segment uuid parameter" }, "page": { "type": "integer", "description": "Page number" }, "per_page": { "type": "integer", "description": "Number of items per page" } }, "required": [ "profileUuid", "segmentUuid" ] }, "security": [ { "apiToken": [] } ], "group": "reach" }, { "name": "reach_segments_profile", "title": "Get profile segment details", "annotations": { "title": "Get profile segment details", "readOnlyHint": true, "destructiveHint": false }, "description": "Get a single segment of a profile, including the conditions that define it.\n\nTo retrieve the contacts currently matching those conditions, use the segment contacts\nendpoint instead.", "method": "GET", "path": "/api/reach/v1/profiles/{profileUuid}/segmentation/segments/{segmentUuid}", "inputSchema": { "type": "object", "properties": { "profileUuid": { "type": "string", "description": "Profile uuid parameter" }, "segmentUuid": { "type": "string", "description": "Segment uuid parameter" } }, "required": [ "profileUuid", "segmentUuid" ] }, "security": [ { "apiToken": [] } ], "group": "reach" }, { "name": "reach_segments_update-profile", "title": "Update a profile segment", "annotations": { "title": "Update a profile segment", "readOnlyHint": false, "destructiveHint": true, "idempotentHint": true }, "description": "Rename a segment and/or replace the conditions that define it.\n\n`name` is always required. Omit `conditions` to rename without touching the conditions;\nsupply them and they replace the existing set entirely rather than being merged into it.\nContacts are never modified, but which of them match the segment can change immediately.", "method": "PUT", "path": "/api/reach/v1/profiles/{profileUuid}/segmentation/segments/{segmentUuid}", "inputSchema": { "type": "object", "properties": { "profileUuid": { "type": "string", "description": "Profile uuid parameter" }, "segmentUuid": { "type": "string", "description": "Segment uuid parameter" }, "name": { "type": "string", "description": "name parameter" }, "conditions": { "type": "array", "description": "Replaces the existing conditions entirely. Omit to keep the current ones.", "items": { "type": "object", "description": "conditions parameter", "properties": { "attribute": { "type": "string", "description": "A built-in contact attribute, or `cf:{fieldUuid}` to target a custom\ncontact field. Custom fields are addressed by field UUID; their slug\nis not accepted.\n\nBuilt-in attributes: `email`, `note`, `domain`, `source`,\n`opt_in_method`, `subscription_status`, `subscribed_at`,\n`unsubscribed_at`, `created_at`, `tag`, `campaigns`, `processed`,\n`opened`, `clicked`, `delivered`, `bounced`, `soft_bounced`,\n`dropped`.\n\nWhich operators are accepted depends on the attribute." }, "operator": { "type": "string", "description": "operator parameter", "enum": [ "equals", "not_equals", "contains", "not_contains", "gte", "lte", "exists", "within_last_days", "not_within_last_days", "older_than_days", "processed", "not_processed", "delivered", "not_delivered", "dropped", "not_dropped", "bounced", "not_bounced", "soft_bounced", "not_soft_bounced", "opened", "not_opened", "clicked", "not_clicked", "unsubscribed", "not_unsubscribed" ] }, "value": { "type": "string", "description": "Always a string, including for numeric and date comparisons" } }, "required": [ "attribute", "operator", "value" ] } }, "logic": { "type": "string", "description": "How to combine multiple conditions. Required when conditions are given.", "enum": [ "AND", "OR" ] } }, "required": [ "profileUuid", "segmentUuid", "name" ] }, "security": [ { "apiToken": [] } ], "group": "reach" }, { "name": "reach_segments_delete-profile", "title": "Delete a profile segment", "annotations": { "title": "Delete a profile segment", "readOnlyHint": false, "destructiveHint": true, "idempotentHint": true }, "description": "Delete a segment.\n\nOnly the segment definition is removed. The contacts that matched it are left untouched.", "method": "DELETE", "path": "/api/reach/v1/profiles/{profileUuid}/segmentation/segments/{segmentUuid}", "inputSchema": { "type": "object", "properties": { "profileUuid": { "type": "string", "description": "Profile uuid parameter" }, "segmentUuid": { "type": "string", "description": "Segment uuid parameter" } }, "required": [ "profileUuid", "segmentUuid" ] }, "security": [ { "apiToken": [] } ], "group": "reach" }, { "name": "reach_segments_list-filter-attributes", "title": "List segment filter attributes", "annotations": { "title": "List segment filter attributes", "readOnlyHint": true, "destructiveHint": false }, "description": "List every attribute a segment condition can filter on, with the operators each attribute\naccepts, the value format they expect and, where the value is constrained, the allowed\nvalues.\n\nThe list is profile specific: it includes the profile's custom contact fields, its tags and\nits 20 most recently published campaigns, so the valid attributes cannot be hardcoded. Read\nit before creating or updating a segment to discover the valid `attribute`, `operator` and\n`value` combinations.", "method": "GET", "path": "/api/reach/v1/profiles/{profileUuid}/segmentation/filters/attributes", "inputSchema": { "type": "object", "properties": { "profileUuid": { "type": "string", "description": "Profile uuid parameter" } }, "required": [ "profileUuid" ] }, "security": [ { "apiToken": [] } ], "group": "reach" }, { "name": "reach_segments_preview-contacts-matching-conditions", "title": "Preview contacts matching conditions", "annotations": { "title": "Preview contacts matching conditions", "readOnlyHint": true, "destructiveHint": false }, "description": "Preview the contacts matching a set of conditions without saving a segment.\n\nThe body is the same set of conditions accepted when creating or updating a segment, so this\nis how to check who a filter reaches, and how many, before persisting it. Nothing is stored\nand no contact is modified.\n\nCall the segment filter attributes endpoint first to discover the valid `attribute`,\n`operator` and `value` combinations.", "method": "POST", "path": "/api/reach/v1/profiles/{profileUuid}/segmentation/filters/contacts", "inputSchema": { "type": "object", "properties": { "profileUuid": { "type": "string", "description": "Profile uuid parameter" }, "conditions": { "type": "array", "description": "Conditions a contact must satisfy to appear in the preview", "items": { "type": "object", "description": "conditions parameter", "properties": { "attribute": { "type": "string", "description": "A built-in contact attribute, or `cf:{fieldUuid}` to target a custom\ncontact field. Which operators are accepted depends on the attribute,\nso read the segment filter attributes endpoint for the authoritative\nlist." }, "operator": { "type": "string", "description": "operator parameter", "enum": [ "equals", "not_equals", "contains", "not_contains", "gte", "lte", "exists", "within_last_days", "not_within_last_days", "older_than_days", "processed", "not_processed", "delivered", "not_delivered", "dropped", "not_dropped", "bounced", "not_bounced", "soft_bounced", "not_soft_bounced", "opened", "not_opened", "clicked", "not_clicked", "unsubscribed", "not_unsubscribed" ] }, "value": { "type": "string", "description": "Always a string, including for numeric and date comparisons" } }, "required": [ "attribute", "operator", "value" ] } }, "logic": { "type": "string", "description": "How to combine multiple conditions", "enum": [ "AND", "OR" ] }, "page": { "type": "integer", "description": "Page number" }, "per_page": { "type": "integer", "description": "Number of items per page" }, "search": { "type": "string", "description": "Narrow the preview to contacts whose email matches" }, "sort_by": { "type": "string", "description": "sort_by parameter", "enum": [ "email", "name", "surname", "phone", "subscription_status" ] }, "sort_direction": { "type": "string", "description": "sort_direction parameter", "enum": [ "asc", "desc" ] } }, "required": [ "profileUuid", "conditions", "logic" ] }, "security": [ { "apiToken": [] } ], "group": "reach" }, { "name": "reach_segments_list-profile", "title": "List profile segments", "annotations": { "title": "List profile segments", "readOnlyHint": true, "destructiveHint": false }, "description": "Get a paginated list of the segments defined in a profile.\n\nEach entry carries the number of contacts currently matching it, which is recalculated on\nread rather than stored. Use `count_type` to count either every matching contact or only\nthe subscribed ones.", "method": "GET", "path": "/api/reach/v1/profiles/{profileUuid}/segmentation/segments", "inputSchema": { "type": "object", "properties": { "profileUuid": { "type": "string", "description": "Profile uuid parameter" }, "count_type": { "type": "string", "description": "Which matching contacts to count for each segment", "enum": [ "all", "subscribed" ] }, "page": { "type": "integer", "description": "Page number" }, "per_page": { "type": "integer", "description": "Number of items per page" } }, "required": [ "profileUuid" ] }, "security": [ { "apiToken": [] } ], "group": "reach" }, { "name": "reach_segments_create-profile", "title": "Create a profile segment", "annotations": { "title": "Create a profile segment", "readOnlyHint": false, "destructiveHint": false }, "description": "Create a segment in a profile.\n\nA segment is a saved set of conditions rather than a fixed list, so its membership changes\nas contacts change. Creating one does not modify any contact.", "method": "POST", "path": "/api/reach/v1/profiles/{profileUuid}/segmentation/segments", "inputSchema": { "type": "object", "properties": { "profileUuid": { "type": "string", "description": "Profile uuid parameter" }, "name": { "type": "string", "description": "name parameter" }, "conditions": { "type": "array", "description": "Conditions a contact must satisfy to fall into the segment", "items": { "type": "object", "description": "conditions parameter", "properties": { "attribute": { "type": "string", "description": "A built-in contact attribute, or `cf:{fieldUuid}` to target a custom\ncontact field. Custom fields are addressed by field UUID; their slug\nis not accepted.\n\nBuilt-in attributes: `email`, `note`, `domain`, `source`,\n`opt_in_method`, `subscription_status`, `subscribed_at`,\n`unsubscribed_at`, `created_at`, `tag`, `campaigns`, `processed`,\n`opened`, `clicked`, `delivered`, `bounced`, `soft_bounced`,\n`dropped`.\n\nWhich operators are accepted depends on the attribute." }, "operator": { "type": "string", "description": "operator parameter", "enum": [ "equals", "not_equals", "contains", "not_contains", "gte", "lte", "exists", "within_last_days", "not_within_last_days", "older_than_days", "processed", "not_processed", "delivered", "not_delivered", "dropped", "not_dropped", "bounced", "not_bounced", "soft_bounced", "not_soft_bounced", "opened", "not_opened", "clicked", "not_clicked", "unsubscribed", "not_unsubscribed" ] }, "value": { "type": "string", "description": "Always a string, including for numeric and date comparisons" } }, "required": [ "attribute", "operator", "value" ] } }, "logic": { "type": "string", "description": "How to combine multiple conditions", "enum": [ "AND", "OR" ] } }, "required": [ "profileUuid", "name", "conditions", "logic" ] }, "security": [ { "apiToken": [] } ], "group": "reach" }, { "name": "reach_segments_list-contacts", "title": "List segment contacts", "annotations": { "title": "List segment contacts", "readOnlyHint": true, "destructiveHint": false }, "description": "Retrieve contacts associated with a specific segment.\n\nThis endpoint allows you to fetch and filter contacts that belong to a particular segment,\nidentified by its UUID.\n\n**Deprecated.** This endpoint cannot target a profile, so it always falls back to\nthe client's default profile and cannot read segments of any other profile. Use\n`GET /api/reach/v1/profiles/{profileUuid}/segmentation/segments/{segmentUuid}/contacts` instead.", "method": "GET", "path": "/api/reach/v1/segmentation/segments/{segmentUuid}/contacts", "inputSchema": { "type": "object", "properties": { "segmentUuid": { "type": "string", "description": "Segment uuid parameter" }, "page": { "type": "integer", "description": "Page number" }, "per_page": { "type": "integer", "description": "Number of items per page" } }, "required": [ "segmentUuid" ] }, "security": [ { "apiToken": [] } ], "group": "reach" }, { "name": "reach_segments_get", "title": "Get segment details", "annotations": { "title": "Get segment details", "readOnlyHint": true, "destructiveHint": false }, "description": "Get details of a specific segment.\n\nThis endpoint retrieves information about a single segment identified by UUID.\nSegments are used to organize and group contacts based on specific criteria.\n\n**Deprecated.** This endpoint cannot target a profile, so it always falls back to\nthe client's default profile and cannot read segments of any other profile. Use\n`GET /api/reach/v1/profiles/{profileUuid}/segmentation/segments/{segmentUuid}` instead.", "method": "GET", "path": "/api/reach/v1/segmentation/segments/{segmentUuid}", "inputSchema": { "type": "object", "properties": { "segmentUuid": { "type": "string", "description": "Segment uuid parameter" } }, "required": [ "segmentUuid" ] }, "security": [ { "apiToken": [] } ], "group": "reach" }, { "name": "reach_tags_assign-contact-to", "title": "Assign a contact to a tag", "annotations": { "title": "Assign a contact to a tag", "readOnlyHint": false, "destructiveHint": false }, "description": "Assign a tag to a single contact.\n\nUnlike the bulk endpoint this is applied immediately rather than queued. Assigning a tag\nthe contact already carries succeeds without duplicating it.", "method": "POST", "path": "/api/reach/v1/profiles/{profileUuid}/tags/{tagUuid}/contacts/{contactUuid}", "inputSchema": { "type": "object", "properties": { "profileUuid": { "type": "string", "description": "Profile uuid parameter" }, "tagUuid": { "type": "string", "description": "Tag uuid parameter" }, "contactUuid": { "type": "string", "description": "Contact uuid parameter" } }, "required": [ "profileUuid", "tagUuid", "contactUuid" ] }, "security": [ { "apiToken": [] } ], "group": "reach" }, { "name": "reach_tags_remove-contact-from", "title": "Remove a contact from a tag", "annotations": { "title": "Remove a contact from a tag", "readOnlyHint": false, "destructiveHint": true, "idempotentHint": true }, "description": "Remove a tag from a single contact.\n\nUnlike the bulk endpoint this is applied immediately rather than queued. Neither the tag\nnor the contact is deleted.", "method": "DELETE", "path": "/api/reach/v1/profiles/{profileUuid}/tags/{tagUuid}/contacts/{contactUuid}", "inputSchema": { "type": "object", "properties": { "profileUuid": { "type": "string", "description": "Profile uuid parameter" }, "tagUuid": { "type": "string", "description": "Tag uuid parameter" }, "contactUuid": { "type": "string", "description": "Contact uuid parameter" } }, "required": [ "profileUuid", "tagUuid", "contactUuid" ] }, "security": [ { "apiToken": [] } ], "group": "reach" }, { "name": "reach_tags_assign-contacts-to", "title": "Assign contacts to a tag", "annotations": { "title": "Assign contacts to a tag", "readOnlyHint": false, "destructiveHint": false }, "description": "Assign a tag to many contacts at once.\n\nPass `contact_uuids` to target specific contacts, or `all_contacts` to target every contact\nin the profile. The work is queued, so a success response means it was accepted rather than\nfinished. Contacts that already carry the tag are left alone.", "method": "POST", "path": "/api/reach/v1/profiles/{profileUuid}/tags/{tagUuid}/contacts", "inputSchema": { "type": "object", "properties": { "profileUuid": { "type": "string", "description": "Profile uuid parameter" }, "tagUuid": { "type": "string", "description": "Tag uuid parameter" }, "contact_uuids": { "type": "array", "description": "Contacts to apply the change to. Required unless all_contacts is true.", "items": { "type": "string", "description": "contact_uuids parameter" } }, "all_contacts": { "type": "boolean", "description": "Apply to every contact in the profile" } }, "required": [ "profileUuid", "tagUuid" ] }, "security": [ { "apiToken": [] } ], "group": "reach" }, { "name": "reach_tags_remove-contacts-from", "title": "Remove contacts from a tag", "annotations": { "title": "Remove contacts from a tag", "readOnlyHint": false, "destructiveHint": true, "idempotentHint": true }, "description": "Remove a tag from many contacts at once.\n\nPass `contact_uuids` to target specific contacts, or `all_contacts` to target every contact\nin the profile. The work is queued, so a success response means it was accepted rather than\nfinished. The tag itself and the contacts are not deleted.", "method": "DELETE", "path": "/api/reach/v1/profiles/{profileUuid}/tags/{tagUuid}/contacts", "inputSchema": { "type": "object", "properties": { "profileUuid": { "type": "string", "description": "Profile uuid parameter" }, "tagUuid": { "type": "string", "description": "Tag uuid parameter" } }, "required": [ "profileUuid", "tagUuid" ] }, "security": [ { "apiToken": [] } ], "group": "reach" }, { "name": "reach_tags_delete", "title": "Delete a tag", "annotations": { "title": "Delete a tag", "readOnlyHint": false, "destructiveHint": true, "idempotentHint": true }, "description": "Delete a tag and remove it from every contact carrying it.\n\nThe contacts themselves are not deleted. This is idempotent: deleting a tag that does not\nexist in the profile still succeeds.", "method": "DELETE", "path": "/api/reach/v1/profiles/{profileUuid}/tags/{tagUuid}", "inputSchema": { "type": "object", "properties": { "profileUuid": { "type": "string", "description": "Profile uuid parameter" }, "tagUuid": { "type": "string", "description": "Tag uuid parameter" } }, "required": [ "profileUuid", "tagUuid" ] }, "security": [ { "apiToken": [] } ], "group": "reach" }, { "name": "reach_tags_rename", "title": "Rename a tag", "annotations": { "title": "Rename a tag", "readOnlyHint": false, "destructiveHint": true, "idempotentHint": true }, "description": "Rename a tag.\n\nThe contacts assigned to the tag are unaffected. Names are unique within a profile, so\nrenaming a tag to a name that is already taken is rejected.", "method": "PATCH", "path": "/api/reach/v1/profiles/{profileUuid}/tags/{tagUuid}", "inputSchema": { "type": "object", "properties": { "profileUuid": { "type": "string", "description": "Profile uuid parameter" }, "tagUuid": { "type": "string", "description": "Tag uuid parameter" }, "value": { "type": "string", "description": "New tag name" } }, "required": [ "profileUuid", "tagUuid", "value" ] }, "security": [ { "apiToken": [] } ], "group": "reach" }, { "name": "reach_tags_list-profile", "title": "List profile tags", "annotations": { "title": "List profile tags", "readOnlyHint": true, "destructiveHint": false }, "description": "Get all tags defined in a profile.\n\nTags are the way contacts are grouped in Reach, and can be used to filter the contact\nlist or to build segments.", "method": "GET", "path": "/api/reach/v1/profiles/{profileUuid}/tags", "inputSchema": { "type": "object", "properties": { "profileUuid": { "type": "string", "description": "Profile uuid parameter" } }, "required": [ "profileUuid" ] }, "security": [ { "apiToken": [] } ], "group": "reach" }, { "name": "reach_tags_create-or-find", "title": "Create or find tags", "annotations": { "title": "Create or find tags", "readOnlyHint": false, "destructiveHint": false }, "description": "Create tags in a profile.\n\nNames that already exist in the profile are not duplicated: the existing tag is returned\ninstead, so the call is safe to repeat. Every tag in the request is returned, whether it\nwas created now or already existed.", "method": "POST", "path": "/api/reach/v1/profiles/{profileUuid}/tags", "inputSchema": { "type": "object", "properties": { "profileUuid": { "type": "string", "description": "Profile uuid parameter" }, "names": { "type": "array", "description": "names parameter", "items": { "type": "string", "description": "names parameter" } } }, "required": [ "profileUuid", "names" ] }, "security": [ { "apiToken": [] } ], "group": "reach" }, { "name": "reach_forms_get", "title": "Get form details", "annotations": { "title": "Get form details", "readOnlyHint": true, "destructiveHint": false }, "description": "Get a single form with the URL of its hosted template and the tags it applies to the contacts\nit captures.\n\nThere is no ready-made embed snippet in the response - either serve the template HTML yourself\nor build your own embed around the form uuid.", "method": "GET", "path": "/api/reach/v1/profiles/{profileUuid}/forms/{formUuid}", "inputSchema": { "type": "object", "properties": { "profileUuid": { "type": "string", "description": "Profile uuid parameter" }, "formUuid": { "type": "string", "description": "Form uuid parameter" } }, "required": [ "profileUuid", "formUuid" ] }, "security": [ { "apiToken": [] } ], "group": "reach" }, { "name": "reach_forms_delete", "title": "Delete form", "annotations": { "title": "Delete form", "readOnlyHint": false, "destructiveHint": true, "idempotentHint": true }, "description": "Permanently delete a form together with its template.\n\nA form that has already captured submissions cannot be deleted, so that the contacts it collected\nare never silently discarded - pause the form instead to stop it collecting new ones. Views alone\ndo not block deletion.", "method": "DELETE", "path": "/api/reach/v1/profiles/{profileUuid}/forms/{formUuid}", "inputSchema": { "type": "object", "properties": { "profileUuid": { "type": "string", "description": "Profile uuid parameter" }, "formUuid": { "type": "string", "description": "Form uuid parameter" } }, "required": [ "profileUuid", "formUuid" ] }, "security": [ { "apiToken": [] } ], "group": "reach" }, { "name": "reach_forms_update", "title": "Update form", "annotations": { "title": "Update form", "readOnlyHint": false, "destructiveHint": true, "idempotentHint": true }, "description": "Rename a form and/or change its status.\n\nSetting a `draft` or `paused` form to `active` takes it live: its latest saved design is published\nand visitors can submit it. `paused` and `draft` stop the form from accepting submissions. A form is\nnot reachable by visitors until it is taken live. Design changes saved while the form is already\n`active` stay unpublished until the form is paused and set to `active` again. Renaming does not rename\nthe automatic `form:{name}` tag.", "method": "PATCH", "path": "/api/reach/v1/profiles/{profileUuid}/forms/{formUuid}", "inputSchema": { "type": "object", "properties": { "profileUuid": { "type": "string", "description": "Profile uuid parameter" }, "formUuid": { "type": "string", "description": "Form uuid parameter" }, "name": { "type": "string", "description": "Form name. Letters, digits, spaces and - . ' _ only." }, "status": { "type": "string", "description": "`active` takes the form live, `paused` and `draft` stop it accepting submissions.", "enum": [ "active", "paused", "draft" ] } }, "required": [ "profileUuid", "formUuid" ] }, "security": [ { "apiToken": [] } ], "group": "reach" }, { "name": "reach_forms_duplicate", "title": "Duplicate form", "annotations": { "title": "Duplicate form", "readOnlyHint": false, "destructiveHint": false }, "description": "Copy a form into a new draft form with the same name and design.\n\nThe copy shares the source's automatic `form:{name}` tag; other submitter tags are not copied. The\ncopy is not live until its status is set to `active`.", "method": "POST", "path": "/api/reach/v1/profiles/{profileUuid}/forms/{formUuid}/duplicate", "inputSchema": { "type": "object", "properties": { "profileUuid": { "type": "string", "description": "Profile uuid parameter" }, "formUuid": { "type": "string", "description": "Form uuid parameter" } }, "required": [ "profileUuid", "formUuid" ] }, "security": [ { "apiToken": [] } ], "group": "reach" }, { "name": "reach_forms_list", "title": "List forms", "annotations": { "title": "List forms", "readOnlyHint": true, "destructiveHint": false }, "description": "Get a paginated list of the signup forms in a profile.\n\nEach form carries a reference to the template that renders it. Get the form details for a\ndirectly usable template URL and for the tags the form puts on the contacts it captures.", "method": "GET", "path": "/api/reach/v1/profiles/{profileUuid}/forms", "inputSchema": { "type": "object", "properties": { "profileUuid": { "type": "string", "description": "Profile uuid parameter" }, "page": { "type": "integer", "description": "Page number" }, "per_page": { "type": "integer", "description": "Number of items per page" }, "status": { "type": "string", "description": "Return only forms with this status.", "enum": [ "active", "paused", "draft" ] } }, "required": [ "profileUuid" ] }, "security": [ { "apiToken": [] } ], "group": "reach" }, { "name": "reach_forms_create", "title": "Create form", "annotations": { "title": "Create form", "readOnlyHint": false, "destructiveHint": false }, "description": "Create an empty draft form.\n\nReach also adds an automatic `form:{name}` tag that every submitter receives. A draft has no design\nand is not reachable by visitors: save a design with the update form template operation, then take\nthe form live by setting its status to `active`. Creating a form does not consume AI credits.", "method": "POST", "path": "/api/reach/v1/profiles/{profileUuid}/forms", "inputSchema": { "type": "object", "properties": { "profileUuid": { "type": "string", "description": "Profile uuid parameter" }, "name": { "type": "string", "description": "Form name. Letters, digits, spaces and - . ' _ only." } }, "required": [ "profileUuid", "name" ] }, "security": [ { "apiToken": [] } ], "group": "reach" }, { "name": "reach_forms_add-submitter-tags", "title": "Add form submitter tags", "annotations": { "title": "Add form submitter tags", "readOnlyHint": false, "destructiveHint": false }, "description": "Add tags to a form so that every contact who submits it from now on receives them.\n\nA tag the form already has is skipped; an unknown tag is rejected. Contacts who submitted earlier are\nnot tagged.", "method": "POST", "path": "/api/reach/v1/profiles/{profileUuid}/forms/{formUuid}/tags", "inputSchema": { "type": "object", "properties": { "profileUuid": { "type": "string", "description": "Profile uuid parameter" }, "formUuid": { "type": "string", "description": "Form uuid parameter" }, "tag_uuids": { "type": "array", "description": "tag_uuids parameter", "items": { "type": "string", "description": "tag_uuids parameter" } } }, "required": [ "profileUuid", "formUuid", "tag_uuids" ] }, "security": [ { "apiToken": [] } ], "group": "reach" }, { "name": "reach_forms_remove-submitter-tag", "title": "Remove form submitter tag", "annotations": { "title": "Remove form submitter tag", "readOnlyHint": false, "destructiveHint": true, "idempotentHint": true }, "description": "Stop a form from applying a tag to its future submitters.\n\nSucceeds also when the form did not have the tag. Contacts who already received the tag keep it, and\nthe tag itself is not deleted. The automatic `form:{name}` tag cannot be removed and is rejected with\na conflict.", "method": "DELETE", "path": "/api/reach/v1/profiles/{profileUuid}/forms/{formUuid}/tags", "inputSchema": { "type": "object", "properties": { "profileUuid": { "type": "string", "description": "Profile uuid parameter" }, "formUuid": { "type": "string", "description": "Form uuid parameter" } }, "required": [ "profileUuid", "formUuid" ] }, "security": [ { "apiToken": [] } ], "group": "reach" }, { "name": "reach_forms_update-template", "title": "Update form template", "annotations": { "title": "Update form template", "readOnlyHint": false, "destructiveHint": true, "idempotentHint": true }, "description": "Save `content` as the latest design of a form and return the stored version.\n\nThe HTML is sanitized and, unless the plan allows removing it, the Reach signature is added. Visitors\nsubmit the form with an `email` field (required) and optional `name`, `surname` and `phone`. After\nsanitizing, the design must contain a form container (`data-reach-form`), an email input\n(`data-reach-field=\"email\"`) and a submit button (`data-reach-submit`); otherwise the request fails\nwith `422` and `errors.content` lists `missing_form_container`, `missing_email_field` and/or\n`missing_submit_button`.\n\nA `draft` or `paused` form stays unreachable until its status is set to `active`, which publishes this\ndesign. On a form that is already `active` the saved design is not public until the form is paused and\nset to `active` again. Saving a design does not consume AI credits.", "method": "PATCH", "path": "/api/reach/v1/profiles/{profileUuid}/forms/{formUuid}/template", "inputSchema": { "type": "object", "properties": { "profileUuid": { "type": "string", "description": "Profile uuid parameter" }, "formUuid": { "type": "string", "description": "Form uuid parameter" }, "content": { "type": "string", "description": "HTML of the form design. After sanitizing it must still contain a form container\n(`data-reach-form`), an email input (`data-reach-field=\"email\"`) and a submit button\n(`data-reach-submit`)." } }, "required": [ "profileUuid", "formUuid", "content" ] }, "security": [ { "apiToken": [] } ], "group": "reach" }, { "name": "reach_profiles_connected-sending-domain", "title": "Get connected sending domain", "annotations": { "title": "Get connected sending domain", "readOnlyHint": true, "destructiveHint": false }, "description": "Get the sending domain connected to the profile, its verification status and any suspended\nsender addresses.\n\nCampaigns only go out once a domain is connected and active, so this is the cheapest way to\ncheck that precondition before building one. A profile with no domain connected returns the\nsame shape with every field set to `null`. For the individual MX, SPF, DKIM and DMARC records\nbehind the status, use the DNS status endpoint.", "method": "GET", "path": "/api/reach/v1/profiles/{profileUuid}/domains", "inputSchema": { "type": "object", "properties": { "profileUuid": { "type": "string", "description": "Profile uuid parameter" } }, "required": [ "profileUuid" ] }, "security": [ { "apiToken": [] } ], "group": "reach" }, { "name": "reach_profiles_connect-sending-domain", "title": "Connect sending domain", "annotations": { "title": "Connect sending domain", "readOnlyHint": false, "destructiveHint": false }, "description": "Connect a sending domain to the profile so emails can be sent from addresses on it.\n\nConnecting does not make the domain ready to send: check the DNS status endpoint next for\nrecords that are still missing. A domain the account owns or has already verified connects\nimmediately. Any other domain starts a TXT ownership verification and returns `409`;\ncomplete the verification in Reach, then retry. Returns `422` when the profile or another\nprofile already has the domain, the domain is blocked, or its ownership cannot be verified.\nAn already connected domain is never replaced.\n\nOn success the sender address of draft and scheduled campaigns, and of published automation\nand double opt-in emails, moves onto the new domain in the background, keeping the part\nbefore the `@`.", "method": "POST", "path": "/api/reach/v1/profiles/{profileUuid}/domains", "inputSchema": { "type": "object", "properties": { "profileUuid": { "type": "string", "description": "Profile uuid parameter" }, "domain": { "type": "string", "description": "domain parameter" } }, "required": [ "profileUuid", "domain" ] }, "security": [ { "apiToken": [] } ], "group": "reach" }, { "name": "reach_profiles_delete-sending-domain", "title": "Delete sending domain", "annotations": { "title": "Delete sending domain", "readOnlyHint": false, "destructiveHint": true, "idempotentHint": true }, "description": "Disconnect the sending domain from the profile.\n\nThe domain record is removed, so the profile has no sending domain afterwards and campaigns\ncannot be sent until a domain is connected again. Sender addresses already stored on\ncampaigns, automations and settings are left untouched and keep pointing at the removed\ndomain. A domain that is not connected to the profile also succeeds, so success is not proof\nthat anything was deleted. DNS records at the DNS provider are not removed. To switch\ndomains, delete this one and connect the new one. Confirm the domain with the customer\nbefore calling.", "method": "DELETE", "path": "/api/reach/v1/profiles/{profileUuid}/domains", "inputSchema": { "type": "object", "properties": { "profileUuid": { "type": "string", "description": "Profile uuid parameter" } }, "required": [ "profileUuid" ] }, "security": [ { "apiToken": [] } ], "group": "reach" }, { "name": "reach_profiles_domain-dns-status", "title": "Get profile domain DNS status", "annotations": { "title": "Get profile domain DNS status", "readOnlyHint": true, "destructiveHint": false }, "description": "Retrieve the DNS configuration status for a profile's domain.\n\nThis endpoint reports the state of MX, SPF, DKIM and DMARC records, including the\nactual records found and the suggested records required for correct email delivery.", "method": "GET", "path": "/api/reach/v1/profiles/{profileUuid}/domains/dns-status", "inputSchema": { "type": "object", "properties": { "profileUuid": { "type": "string", "description": "Profile uuid parameter" } }, "required": [ "profileUuid" ] }, "security": [ { "apiToken": [] } ], "group": "reach" }, { "name": "reach_profiles_list-plan-feature-access", "title": "List plan feature access", "annotations": { "title": "List plan feature access", "readOnlyHint": true, "destructiveHint": false }, "description": "List which plan features the profile can use.\n\nThis is the feature lock matrix, not a usage quota. `available` means the feature can be\nused right now and `locked` means it is not part of the base plan, so an upgrade is needed.\nFor remaining emails, recipients and AI credits use the limits endpoint instead.\n\nWorth checking before building something that cannot be activated afterwards, such as an\nautomation on a plan without automation activation.", "method": "GET", "path": "/api/reach/v1/profiles/{profileUuid}/features", "inputSchema": { "type": "object", "properties": { "profileUuid": { "type": "string", "description": "Profile uuid parameter" } }, "required": [ "profileUuid" ] }, "security": [ { "apiToken": [] } ], "group": "reach" }, { "name": "reach_profiles_remaining-plan-limits", "title": "Get remaining plan limits", "annotations": { "title": "Get remaining plan limits", "readOnlyHint": true, "destructiveHint": false }, "description": "Get how much of the plan is left for the current period.\n\nTwo things to keep in mind before you build alerting on this. The period is a calendar month\nrather than a billing anniversary, so the counters reset on the 1st no matter when the\nsubscription started. And usage is tracked per order, so every profile on the same order shares\none pool and reports the same numbers here. Only the current period is available, past usage is\nnot kept.", "method": "GET", "path": "/api/reach/v1/profiles/{profileUuid}/limits", "inputSchema": { "type": "object", "properties": { "profileUuid": { "type": "string", "description": "Profile uuid parameter" } }, "required": [ "profileUuid" ] }, "security": [ { "apiToken": [] } ], "group": "reach" }, { "name": "reach_profiles_list", "title": "List Profiles", "annotations": { "title": "List Profiles", "readOnlyHint": true, "destructiveHint": false }, "description": "This endpoint returns all profiles available to the client, including their basic information.", "method": "GET", "path": "/api/reach/v1/profiles", "inputSchema": { "type": "object", "properties": {}, "required": [] }, "security": [ { "apiToken": [] } ], "group": "reach" }, { "name": "reach_profiles_settings", "title": "Get profile settings", "annotations": { "title": "Get profile settings", "readOnlyHint": true, "destructiveHint": false }, "description": "Get the profile's saved sender identity and brand details.\n\nRead the default sender before creating a campaign instead of asking the customer, and\nreuse the brand fields when generating email content. Any field can be `null` for a profile\nthat never filled its settings in. This does not check that the sending domain is\nverified, use the connected sending domain endpoint for that.", "method": "GET", "path": "/api/reach/v1/profiles/{profileUuid}/settings", "inputSchema": { "type": "object", "properties": { "profileUuid": { "type": "string", "description": "Profile uuid parameter" } }, "required": [ "profileUuid" ] }, "security": [ { "apiToken": [] } ], "group": "reach" }, { "name": "reach_profiles_update-settings", "title": "Update profile settings", "annotations": { "title": "Update profile settings", "readOnlyHint": false, "destructiveHint": true, "idempotentHint": true }, "description": "Change the profile's default sender and brand details.\n\nSend only the fields to change: every omitted field keeps its value, and `null` or an empty\nstring clears a text field. The default sender is what campaigns created afterwards start\nfrom; existing campaigns keep their own sender. `sender_email` is only the part before the\n`@`, because Reach combines it with the profile's connected sending domain, so an address\noutside that domain cannot be set. Connecting a sending domain is a separate endpoint and\na connected domain cannot be changed here. Returns the settings after the change.", "method": "PATCH", "path": "/api/reach/v1/profiles/{profileUuid}/settings", "inputSchema": { "type": "object", "properties": { "profileUuid": { "type": "string", "description": "Profile uuid parameter" }, "brand_name": { "type": "string", "description": "brand_name parameter" }, "website_url": { "type": "string", "description": "website_url parameter" }, "business_address": { "type": "string", "description": "business_address parameter" }, "privacy_policy_url": { "type": "string", "description": "privacy_policy_url parameter" }, "accent_color": { "type": "string", "description": "accent_color parameter" }, "button_color": { "type": "string", "description": "button_color parameter" }, "background_color": { "type": "string", "description": "background_color parameter" }, "text_color": { "type": "string", "description": "text_color parameter" }, "links_color": { "type": "string", "description": "links_color parameter" }, "button_text": { "type": "string", "description": "Button text colour." }, "button_corners": { "type": "integer", "description": "button_corners parameter" }, "font_family": { "type": "string", "description": "font_family parameter" }, "heading_font_family": { "type": "string", "description": "heading_font_family parameter" }, "logo_url": { "type": "string", "description": "Public image URL. Logo uploads are not supported." }, "social_links": { "type": "array", "description": "social_links parameter", "items": { "type": "string", "description": "social_links parameter" } }, "socials": { "type": "object", "description": "Social profile links keyed by platform.", "properties": {} }, "about": { "type": "string", "description": "about parameter" }, "keywords": { "type": "array", "description": "keywords parameter", "items": { "type": "string", "description": "keywords parameter" } }, "topics": { "type": "array", "description": "topics parameter", "items": { "type": "string", "description": "topics parameter" } }, "selling_points": { "type": "array", "description": "selling_points parameter", "items": { "type": "string", "description": "selling_points parameter" } }, "sender_name": { "type": "string", "description": "Default sender name. Letters, numbers and spaces only." }, "sender_email": { "type": "string", "description": "Part of the default sender address before the `@`, for example `hello`. Never send a\nfull address: Reach adds the profile's connected sending domain itself." } }, "required": [ "profileUuid" ] }, "security": [ { "apiToken": [] } ], "group": "reach" }, { "name": "reach_templates_list-email", "title": "List email templates", "annotations": { "title": "List email templates", "readOnlyHint": true, "destructiveHint": false }, "description": "Get a list of the email templates in a profile, most recently updated first.\n\nTemplates are the reusable email bodies a campaign is built from. The list is not paginated\nand only the metadata is returned - the template content itself is not exposed. Use the\n`uuid` of a template as the `template_uuid` when creating a campaign.", "method": "GET", "path": "/api/reach/v1/profiles/{profileUuid}/templates", "inputSchema": { "type": "object", "properties": { "profileUuid": { "type": "string", "description": "Profile uuid parameter" } }, "required": [ "profileUuid" ] }, "security": [ { "apiToken": [] } ], "group": "reach" }, { "name": "reach_templates_create-email", "title": "Create an email template", "annotations": { "title": "Create an email template", "readOnlyHint": false, "destructiveHint": false }, "description": "Create an email template in a profile.\n\nThe template holds the HTML body a campaign reuses, so it can be created before any\ncampaign exists. Only the template metadata comes back - keep the returned `uuid` to\nreference it as the `template_uuid` of a campaign.", "method": "POST", "path": "/api/reach/v1/profiles/{profileUuid}/templates", "inputSchema": { "type": "object", "properties": { "profileUuid": { "type": "string", "description": "Profile uuid parameter" }, "template_content": { "type": "string", "description": "The email body as HTML. It is sanitised before it is stored, so the saved template\ncan differ from what was sent - inline any styles the email clients need and keep\nthe markup self-contained." }, "title": { "type": "string", "description": "Name the template is listed under. Not shown to the recipients." } }, "required": [ "profileUuid", "template_content" ] }, "security": [ { "apiToken": [] } ], "group": "reach" }, { "name": "vps_data-centers_list", "title": "Get data center list", "annotations": { "title": "Get data center list", "readOnlyHint": true, "destructiveHint": false }, "description": "Retrieve all available data centers.\n\nUse this endpoint to view location options before deploying VPS instances.", "method": "GET", "path": "/api/vps/v1/data-centers", "inputSchema": { "type": "object", "properties": {}, "required": [] }, "security": [ { "apiToken": [] } ], "group": "vps" }, { "name": "vps_docker_containers", "title": "Get project containers", "annotations": { "title": "Get project containers", "readOnlyHint": true, "destructiveHint": false }, "description": "Retrieves a list of all containers belonging to a specific Docker Compose project on the virtual machine. \n\nThis endpoint returns detailed information about each container including\ntheir current status, port mappings, and runtime configuration.\n\nUse this to monitor the health and state of all services within your Docker Compose project.", "method": "GET", "path": "/api/vps/v1/virtual-machines/{virtualMachineId}/docker/{projectName}/containers", "inputSchema": { "type": "object", "properties": { "virtualMachineId": { "type": "integer", "description": "Virtual Machine ID" }, "projectName": { "type": "string", "description": "Docker Compose project name using alphanumeric characters, dashes, and underscores only" } }, "required": [ "virtualMachineId", "projectName" ] }, "security": [ { "apiToken": [] } ], "group": "vps" }, { "name": "vps_docker_get", "title": "Get project contents", "annotations": { "title": "Get project contents", "readOnlyHint": true, "destructiveHint": false }, "description": "Retrieves the complete project information including the docker-compose.yml\nfile contents, project metadata, and current deployment status.\n\nThis endpoint provides the full configuration and state details of a specific Docker Compose project. \n\nUse this to inspect project settings, review the compose file, or check the overall project health.", "method": "GET", "path": "/api/vps/v1/virtual-machines/{virtualMachineId}/docker/{projectName}", "inputSchema": { "type": "object", "properties": { "virtualMachineId": { "type": "integer", "description": "Virtual Machine ID" }, "projectName": { "type": "string", "description": "Docker Compose project name using alphanumeric characters, dashes, and underscores only" } }, "required": [ "virtualMachineId", "projectName" ] }, "security": [ { "apiToken": [] } ], "group": "vps" }, { "name": "vps_docker_delete", "title": "Delete project", "annotations": { "title": "Delete project", "readOnlyHint": false, "destructiveHint": true, "idempotentHint": true }, "description": "Completely removes a Docker Compose project from the virtual machine, stopping all containers and cleaning up \nassociated resources including networks, volumes, and images. \n\nThis operation is irreversible and will delete all project data. \n\nUse this when you want to permanently remove a project and free up system resources.", "method": "DELETE", "path": "/api/vps/v1/virtual-machines/{virtualMachineId}/docker/{projectName}/down", "inputSchema": { "type": "object", "properties": { "virtualMachineId": { "type": "integer", "description": "Virtual Machine ID" }, "projectName": { "type": "string", "description": "Docker Compose project name using alphanumeric characters, dashes, and underscores only" } }, "required": [ "virtualMachineId", "projectName" ] }, "security": [ { "apiToken": [] } ], "group": "vps" }, { "name": "vps_docker_list", "title": "Get project list", "annotations": { "title": "Get project list", "readOnlyHint": true, "destructiveHint": false }, "description": "Retrieves a list of all Docker Compose projects currently deployed on the virtual machine. \n\nThis endpoint returns basic information about each project including name,\nstatus, file path and list of containers with details about their names,\nimage, status, health and ports. Container stats are omitted in this\nendpoint. If you need to get detailed information about container with\nstats included, use the `Get project containers` endpoint.\n\nUse this to get an overview of all Docker projects on your VPS instance.", "method": "GET", "path": "/api/vps/v1/virtual-machines/{virtualMachineId}/docker", "inputSchema": { "type": "object", "properties": { "virtualMachineId": { "type": "integer", "description": "Virtual Machine ID" } }, "required": [ "virtualMachineId" ] }, "security": [ { "apiToken": [] } ], "group": "vps" }, { "name": "vps_docker_create", "title": "Create new project", "annotations": { "title": "Create new project", "readOnlyHint": false, "destructiveHint": false }, "description": "Deploy new project from docker-compose.yaml contents or download contents from URL. \n\nURL can be Github repository url in format https://github.com/[user]/[repo]\nand it will be automatically resolved to docker-compose.yaml file in\nmaster branch. Any other URL provided must return docker-compose.yaml\nfile contents.\n\nIf project with the same name already exists, existing project will be replaced.", "method": "POST", "path": "/api/vps/v1/virtual-machines/{virtualMachineId}/docker", "inputSchema": { "type": "object", "properties": { "virtualMachineId": { "type": "integer", "description": "Virtual Machine ID" }, "project_name": { "type": "string", "description": "Docker Compose project name using alphanumeric characters, dashes, and underscores only" }, "content": { "type": "string", "description": "URL pointing to docker-compose.yaml file, Github repository or raw YAML content of the compose file" }, "environment": { "type": "string", "description": "Project environment variables" } }, "required": [ "virtualMachineId", "project_name", "content" ] }, "security": [ { "apiToken": [] } ], "group": "vps" }, { "name": "vps_docker_logs", "title": "Get project logs", "annotations": { "title": "Get project logs", "readOnlyHint": true, "destructiveHint": false }, "description": "Retrieves aggregated log entries from all services within a Docker Compose project. \n\nThis endpoint returns recent log output from each container, organized by service name with timestamps. \nThe response contains the last 300 log entries across all services. \n\nUse this for debugging, monitoring application behavior, and\ntroubleshooting issues across your entire project stack.", "method": "GET", "path": "/api/vps/v1/virtual-machines/{virtualMachineId}/docker/{projectName}/logs", "inputSchema": { "type": "object", "properties": { "virtualMachineId": { "type": "integer", "description": "Virtual Machine ID" }, "projectName": { "type": "string", "description": "Docker Compose project name using alphanumeric characters, dashes, and underscores only" } }, "required": [ "virtualMachineId", "projectName" ] }, "security": [ { "apiToken": [] } ], "group": "vps" }, { "name": "vps_docker_restart", "title": "Restart project", "annotations": { "title": "Restart project", "readOnlyHint": false, "destructiveHint": false }, "description": "Restarts all services in a Docker Compose project by stopping and starting\ncontainers in the correct dependency order.\n\nThis operation preserves data volumes and network configurations while refreshing the running containers. \n\nUse this to apply configuration changes or recover from service failures.", "method": "POST", "path": "/api/vps/v1/virtual-machines/{virtualMachineId}/docker/{projectName}/restart", "inputSchema": { "type": "object", "properties": { "virtualMachineId": { "type": "integer", "description": "Virtual Machine ID" }, "projectName": { "type": "string", "description": "Docker Compose project name using alphanumeric characters, dashes, and underscores only" } }, "required": [ "virtualMachineId", "projectName" ] }, "security": [ { "apiToken": [] } ], "group": "vps" }, { "name": "vps_docker_start", "title": "Start project", "annotations": { "title": "Start project", "readOnlyHint": false, "destructiveHint": false }, "description": "Starts all services in a Docker Compose project that are currently stopped. \n\nThis operation brings up containers in the correct dependency order as defined in the compose file. \n\nUse this to resume a project that was previously stopped or to start services after a system reboot.", "method": "POST", "path": "/api/vps/v1/virtual-machines/{virtualMachineId}/docker/{projectName}/start", "inputSchema": { "type": "object", "properties": { "virtualMachineId": { "type": "integer", "description": "Virtual Machine ID" }, "projectName": { "type": "string", "description": "Docker Compose project name using alphanumeric characters, dashes, and underscores only" } }, "required": [ "virtualMachineId", "projectName" ] }, "security": [ { "apiToken": [] } ], "group": "vps" }, { "name": "vps_docker_stop", "title": "Stop project", "annotations": { "title": "Stop project", "readOnlyHint": false, "destructiveHint": true }, "description": "Stops all running services in a Docker Compose project while preserving\ncontainer configurations and data volumes.\n\nThis operation gracefully shuts down containers in reverse dependency order. \n\nUse this to temporarily halt a project without removing data or configurations.", "method": "POST", "path": "/api/vps/v1/virtual-machines/{virtualMachineId}/docker/{projectName}/stop", "inputSchema": { "type": "object", "properties": { "virtualMachineId": { "type": "integer", "description": "Virtual Machine ID" }, "projectName": { "type": "string", "description": "Docker Compose project name using alphanumeric characters, dashes, and underscores only" } }, "required": [ "virtualMachineId", "projectName" ] }, "security": [ { "apiToken": [] } ], "group": "vps" }, { "name": "vps_docker_update", "title": "Update project", "annotations": { "title": "Update project", "readOnlyHint": false, "destructiveHint": false }, "description": "Updates a Docker Compose project by pulling the latest image versions and\nrecreating containers with new configurations.\n\nThis operation preserves data volumes while applying changes from the compose file. \n\nUse this to deploy application updates, apply configuration changes, or\nrefresh container images to their latest versions.", "method": "POST", "path": "/api/vps/v1/virtual-machines/{virtualMachineId}/docker/{projectName}/update", "inputSchema": { "type": "object", "properties": { "virtualMachineId": { "type": "integer", "description": "Virtual Machine ID" }, "projectName": { "type": "string", "description": "Docker Compose project name using alphanumeric characters, dashes, and underscores only" } }, "required": [ "virtualMachineId", "projectName" ] }, "security": [ { "apiToken": [] } ], "group": "vps" }, { "name": "vps_firewall_activate", "title": "Activate firewall", "annotations": { "title": "Activate firewall", "readOnlyHint": false, "destructiveHint": false }, "description": "Activate a firewall for a specified virtual machine.\n\nOnly one firewall can be active for a virtual machine at a time.\n\nUse this endpoint to apply firewall rules to VPS instances.", "method": "POST", "path": "/api/vps/v1/firewall/{firewallId}/activate/{virtualMachineId}", "inputSchema": { "type": "object", "properties": { "firewallId": { "type": "integer", "description": "Firewall ID" }, "virtualMachineId": { "type": "integer", "description": "Virtual Machine ID" } }, "required": [ "firewallId", "virtualMachineId" ] }, "security": [ { "apiToken": [] } ], "group": "vps" }, { "name": "vps_firewall_deactivate", "title": "Deactivate firewall", "annotations": { "title": "Deactivate firewall", "readOnlyHint": false, "destructiveHint": false }, "description": "Deactivate a firewall for a specified virtual machine.\n\nUse this endpoint to remove firewall protection from VPS instances.", "method": "POST", "path": "/api/vps/v1/firewall/{firewallId}/deactivate/{virtualMachineId}", "inputSchema": { "type": "object", "properties": { "firewallId": { "type": "integer", "description": "Firewall ID" }, "virtualMachineId": { "type": "integer", "description": "Virtual Machine ID" } }, "required": [ "firewallId", "virtualMachineId" ] }, "security": [ { "apiToken": [] } ], "group": "vps" }, { "name": "vps_firewall_get", "title": "Get firewall details", "annotations": { "title": "Get firewall details", "readOnlyHint": true, "destructiveHint": false }, "description": "Retrieve firewall by its ID and rules associated with it.\n\nUse this endpoint to view specific firewall configuration and rules.", "method": "GET", "path": "/api/vps/v1/firewall/{firewallId}", "inputSchema": { "type": "object", "properties": { "firewallId": { "type": "integer", "description": "Firewall ID" } }, "required": [ "firewallId" ] }, "security": [ { "apiToken": [] } ], "group": "vps" }, { "name": "vps_firewall_delete", "title": "Delete firewall", "annotations": { "title": "Delete firewall", "readOnlyHint": false, "destructiveHint": true, "idempotentHint": true }, "description": "Delete a specified firewall.\n\nAny virtual machine that has this firewall activated will automatically have it deactivated.\n\nUse this endpoint to remove unused firewall configurations.", "method": "DELETE", "path": "/api/vps/v1/firewall/{firewallId}", "inputSchema": { "type": "object", "properties": { "firewallId": { "type": "integer", "description": "Firewall ID" } }, "required": [ "firewallId" ] }, "security": [ { "apiToken": [] } ], "group": "vps" }, { "name": "vps_firewall_list", "title": "Get firewall list", "annotations": { "title": "Get firewall list", "readOnlyHint": true, "destructiveHint": false }, "description": "Retrieve all available firewalls.\n\nUse this endpoint to view existing firewall configurations.", "method": "GET", "path": "/api/vps/v1/firewall", "inputSchema": { "type": "object", "properties": { "page": { "type": "integer", "description": "Page number" } }, "required": [] }, "security": [ { "apiToken": [] } ], "group": "vps" }, { "name": "vps_firewall_create", "title": "Create new firewall", "annotations": { "title": "Create new firewall", "readOnlyHint": false, "destructiveHint": false }, "description": "Create a new firewall.\n\nUse this endpoint to set up new firewall configurations for VPS security.", "method": "POST", "path": "/api/vps/v1/firewall", "inputSchema": { "type": "object", "properties": { "name": { "type": "string", "description": "name parameter" } }, "required": [ "name" ] }, "security": [ { "apiToken": [] } ], "group": "vps" }, { "name": "vps_firewall_update-rule", "title": "Update firewall rule", "annotations": { "title": "Update firewall rule", "readOnlyHint": false, "destructiveHint": true, "idempotentHint": true }, "description": "Update a specific firewall rule from a specified firewall.\n\nAny virtual machine that has this firewall activated will lose sync with the firewall\nand will have to be synced again manually.\n\nUse this endpoint to modify existing firewall rules.", "method": "PUT", "path": "/api/vps/v1/firewall/{firewallId}/rules/{ruleId}", "inputSchema": { "type": "object", "properties": { "firewallId": { "type": "integer", "description": "Firewall ID" }, "ruleId": { "type": "integer", "description": "Firewall Rule ID" }, "protocol": { "type": "string", "description": "protocol parameter", "enum": [ "TCP", "UDP", "ICMP", "GRE", "any", "ESP", "AH", "ICMPv6", "SSH", "HTTP", "HTTPS", "MySQL", "PostgreSQL" ] }, "port": { "type": "string", "description": "Port or port range, ex: 1024:2048" }, "source": { "type": "string", "description": "source parameter", "enum": [ "any", "custom" ] }, "source_detail": { "type": "string", "description": "IP range, CIDR, single IP or `any`" } }, "required": [ "firewallId", "ruleId", "protocol", "port", "source", "source_detail" ] }, "security": [ { "apiToken": [] } ], "group": "vps" }, { "name": "vps_firewall_delete-rule", "title": "Delete firewall rule", "annotations": { "title": "Delete firewall rule", "readOnlyHint": false, "destructiveHint": true, "idempotentHint": true }, "description": "Delete a specific firewall rule from a specified firewall.\n\nAny virtual machine that has this firewall activated will lose sync with the firewall\nand will have to be synced again manually.\n\nUse this endpoint to remove specific firewall rules.", "method": "DELETE", "path": "/api/vps/v1/firewall/{firewallId}/rules/{ruleId}", "inputSchema": { "type": "object", "properties": { "firewallId": { "type": "integer", "description": "Firewall ID" }, "ruleId": { "type": "integer", "description": "Firewall Rule ID" } }, "required": [ "firewallId", "ruleId" ] }, "security": [ { "apiToken": [] } ], "group": "vps" }, { "name": "vps_firewall_replace-all-rules-in-group", "title": "Replace all firewall rules in group", "annotations": { "title": "Replace all firewall rules in group", "readOnlyHint": false, "destructiveHint": true, "idempotentHint": true }, "description": "Replaces all firewall rules within a specified firewall group with the provided set of rules\nin a single atomic operation, instead of creating or deleting rules one by one.\n\nAny virtual machine using this firewall group will need to be synchronized after replacing rules;\npass the \"sync\" parameter to trigger synchronization immediately.", "method": "PUT", "path": "/api/vps/v1/firewall/{firewallId}/rules", "inputSchema": { "type": "object", "properties": { "firewallId": { "type": "integer", "description": "Firewall ID" }, "rules": { "type": "array", "description": "The complete set of firewall rules that atomically replaces all existing rules in the group", "items": { "type": "string", "description": "rules parameter" } }, "sync": { "type": "boolean", "description": "Synchronize the firewall group to all its virtual machines after replacing the rules" } }, "required": [ "firewallId", "rules" ] }, "security": [ { "apiToken": [] } ], "group": "vps" }, { "name": "vps_firewall_create-rule", "title": "Create firewall rule", "annotations": { "title": "Create firewall rule", "readOnlyHint": false, "destructiveHint": false }, "description": "Create new firewall rule for a specified firewall.\n\nBy default, the firewall drops all incoming traffic,\nwhich means you must add accept rules for all ports you want to use.\n\nAny virtual machine that has this firewall activated will lose sync with the firewall\nand will have to be synced again manually.\n\nUse this endpoint to add new security rules to firewalls.", "method": "POST", "path": "/api/vps/v1/firewall/{firewallId}/rules", "inputSchema": { "type": "object", "properties": { "firewallId": { "type": "integer", "description": "Firewall ID" }, "protocol": { "type": "string", "description": "protocol parameter", "enum": [ "TCP", "UDP", "ICMP", "GRE", "any", "ESP", "AH", "ICMPv6", "SSH", "HTTP", "HTTPS", "MySQL", "PostgreSQL" ] }, "port": { "type": "string", "description": "Port or port range, ex: 1024:2048" }, "source": { "type": "string", "description": "source parameter", "enum": [ "any", "custom" ] }, "source_detail": { "type": "string", "description": "IP range, CIDR, single IP or `any`" } }, "required": [ "firewallId", "protocol", "port", "source", "source_detail" ] }, "security": [ { "apiToken": [] } ], "group": "vps" }, { "name": "vps_firewall_sync-to-all-assigned-v-ms", "title": "Sync firewall to all assigned VMs", "annotations": { "title": "Sync firewall to all assigned VMs", "readOnlyHint": false, "destructiveHint": false }, "description": "Sync a firewall's rules to every virtual machine it's assigned to.\n\nFirewall can lose sync with a virtual machine if the firewall has new rules added, removed or updated.\n\nUse this endpoint to apply updated firewall rules to all VPS instances assigned to the firewall.", "method": "POST", "path": "/api/vps/v1/firewall/{firewallId}/sync", "inputSchema": { "type": "object", "properties": { "firewallId": { "type": "integer", "description": "Firewall ID" } }, "required": [ "firewallId" ] }, "security": [ { "apiToken": [] } ], "group": "vps" }, { "name": "vps_firewall_sync", "title": "Sync firewall", "annotations": { "title": "Sync firewall", "readOnlyHint": false, "destructiveHint": false }, "description": "Deprecated: use `POST /api/vps/v1/firewall/{firewallId}/sync` instead, which syncs the firewall\nto all virtual machines assigned to it.\n\nSync a firewall for a specified virtual machine.\n\nFirewall can lose sync with virtual machine if the firewall has new rules added, removed or updated.\n\nUse this endpoint to apply updated firewall rules to VPS instances.", "method": "POST", "path": "/api/vps/v1/firewall/{firewallId}/sync/{virtualMachineId}", "inputSchema": { "type": "object", "properties": { "firewallId": { "type": "integer", "description": "Firewall ID" }, "virtualMachineId": { "type": "integer", "description": "Virtual Machine ID" } }, "required": [ "firewallId", "virtualMachineId" ] }, "security": [ { "apiToken": [] } ], "group": "vps" }, { "name": "vps_post-install-scripts_get", "title": "Get post-install script", "annotations": { "title": "Get post-install script", "readOnlyHint": true, "destructiveHint": false }, "description": "Retrieve post-install script by its ID.\n\nUse this endpoint to view specific automation script details.", "method": "GET", "path": "/api/vps/v1/post-install-scripts/{postInstallScriptId}", "inputSchema": { "type": "object", "properties": { "postInstallScriptId": { "type": "integer", "description": "Post-install script ID" } }, "required": [ "postInstallScriptId" ] }, "security": [ { "apiToken": [] } ], "group": "vps" }, { "name": "vps_post-install-scripts_update", "title": "Update post-install script", "annotations": { "title": "Update post-install script", "readOnlyHint": false, "destructiveHint": true, "idempotentHint": true }, "description": "Update a specific post-install script.\n\nUse this endpoint to modify existing automation scripts.", "method": "PUT", "path": "/api/vps/v1/post-install-scripts/{postInstallScriptId}", "inputSchema": { "type": "object", "properties": { "postInstallScriptId": { "type": "integer", "description": "Post-install script ID" }, "name": { "type": "string", "description": "Name of the script" }, "content": { "type": "string", "description": "Content of the script" } }, "required": [ "postInstallScriptId", "name", "content" ] }, "security": [ { "apiToken": [] } ], "group": "vps" }, { "name": "vps_post-install-scripts_delete", "title": "Delete post-install script", "annotations": { "title": "Delete post-install script", "readOnlyHint": false, "destructiveHint": true, "idempotentHint": true }, "description": "Delete a post-install script from your account.\n \nUse this endpoint to remove unused automation scripts.", "method": "DELETE", "path": "/api/vps/v1/post-install-scripts/{postInstallScriptId}", "inputSchema": { "type": "object", "properties": { "postInstallScriptId": { "type": "integer", "description": "Post-install script ID" } }, "required": [ "postInstallScriptId" ] }, "security": [ { "apiToken": [] } ], "group": "vps" }, { "name": "vps_post-install-scripts_list", "title": "Get post-install scripts", "annotations": { "title": "Get post-install scripts", "readOnlyHint": true, "destructiveHint": false }, "description": "Retrieve post-install scripts associated with your account.\n\nUse this endpoint to view available automation scripts for VPS deployment.", "method": "GET", "path": "/api/vps/v1/post-install-scripts", "inputSchema": { "type": "object", "properties": { "page": { "type": "integer", "description": "Page number" } }, "required": [] }, "security": [ { "apiToken": [] } ], "group": "vps" }, { "name": "vps_post-install-scripts_create", "title": "Create post-install script", "annotations": { "title": "Create post-install script", "readOnlyHint": false, "destructiveHint": false }, "description": "Add a new post-install script to your account, which can then be used after virtual machine installation.\n\nThe script contents will be saved to the file `/post_install` with executable attribute set\nand will be executed once virtual machine is installed.\nThe output of the script will be redirected to `/post_install.log`. Maximum script size is 48KB.\n\nUse this endpoint to create automation scripts for VPS setup tasks.", "method": "POST", "path": "/api/vps/v1/post-install-scripts", "inputSchema": { "type": "object", "properties": { "name": { "type": "string", "description": "Name of the script" }, "content": { "type": "string", "description": "Content of the script" } }, "required": [ "name", "content" ] }, "security": [ { "apiToken": [] } ], "group": "vps" }, { "name": "vps_public-keys_attach", "title": "Attach public key", "annotations": { "title": "Attach public key", "readOnlyHint": false, "destructiveHint": false }, "description": "Deprecated: use `POST /api/vps/v1/virtual-machines/{virtualMachineId}/ssh-keys` instead.\n\nAttach existing public keys from your account to a specified virtual machine.\n\nMultiple keys can be attached to a single virtual machine.\n\nUse this endpoint to enable SSH key authentication for VPS instances.", "method": "POST", "path": "/api/vps/v1/public-keys/attach/{virtualMachineId}", "inputSchema": { "type": "object", "properties": { "virtualMachineId": { "type": "integer", "description": "Virtual Machine ID" }, "ids": { "type": "array", "description": "Public Key IDs to attach", "items": { "type": "integer", "description": "ids parameter" } } }, "required": [ "virtualMachineId", "ids" ] }, "security": [ { "apiToken": [] } ], "group": "vps" }, { "name": "vps_public-keys_delete", "title": "Delete public key", "annotations": { "title": "Delete public key", "readOnlyHint": false, "destructiveHint": true, "idempotentHint": true }, "description": "Deprecated: account-level public keys have no direct replacement. Root SSH keys are now managed per\nvirtual machine via `DELETE /api/vps/v1/virtual-machines/{virtualMachineId}/ssh-keys`.\n\nDelete a public key from your account. \n\n**Deleting public key from account does not remove it from virtual machine** \n \nUse this endpoint to remove unused SSH keys from account.", "method": "DELETE", "path": "/api/vps/v1/public-keys/{publicKeyId}", "inputSchema": { "type": "object", "properties": { "publicKeyId": { "type": "integer", "description": "Public Key ID" } }, "required": [ "publicKeyId" ] }, "security": [ { "apiToken": [] } ], "group": "vps" }, { "name": "vps_public-keys_list", "title": "Get public keys", "annotations": { "title": "Get public keys", "readOnlyHint": true, "destructiveHint": false }, "description": "Deprecated: account-level public keys have no direct replacement. Root SSH keys are now managed per\nvirtual machine via `GET /api/vps/v1/virtual-machines/{virtualMachineId}/ssh-keys`.\n\nRetrieve public keys associated with your account.\n\nUse this endpoint to view available SSH keys for VPS authentication.", "method": "GET", "path": "/api/vps/v1/public-keys", "inputSchema": { "type": "object", "properties": { "page": { "type": "integer", "description": "Page number" } }, "required": [] }, "security": [ { "apiToken": [] } ], "group": "vps" }, { "name": "vps_public-keys_create", "title": "Create public key", "annotations": { "title": "Create public key", "readOnlyHint": false, "destructiveHint": false }, "description": "Deprecated: account-level public keys have no direct replacement. Root SSH keys are now managed per\nvirtual machine via `POST /api/vps/v1/virtual-machines/{virtualMachineId}/ssh-keys`.\n\nAdd a new public key to your account.\n\nUse this endpoint to register SSH keys for VPS authentication.", "method": "POST", "path": "/api/vps/v1/public-keys", "inputSchema": { "type": "object", "properties": { "name": { "type": "string", "description": "name parameter" }, "key": { "type": "string", "description": "key parameter" } }, "required": [ "name", "key" ] }, "security": [ { "apiToken": [] } ], "group": "vps" }, { "name": "vps_ssh-keys_list-virtual-machine", "title": "List virtual machine SSH keys", "annotations": { "title": "List virtual machine SSH keys", "readOnlyHint": true, "destructiveHint": false }, "description": "Retrieve SSH public keys currently configured on a specified virtual machine.\n\nOnly keys of the `root` user are listed.\n\nUse this endpoint to view SSH keys that can be used for authentication on VPS instances.", "method": "GET", "path": "/api/vps/v1/virtual-machines/{virtualMachineId}/ssh-keys", "inputSchema": { "type": "object", "properties": { "virtualMachineId": { "type": "integer", "description": "Virtual Machine ID" } }, "required": [ "virtualMachineId" ] }, "security": [ { "apiToken": [] } ], "group": "vps" }, { "name": "vps_ssh-keys_add-virtual-machine", "title": "Add virtual machine SSH keys", "annotations": { "title": "Add virtual machine SSH keys", "readOnlyHint": false, "destructiveHint": false }, "description": "Add one or more SSH public keys to a specified virtual machine.\n\nKeys are added to the `root` user and can be used for passwordless SSH authentication.\nReturns the complete list of SSH keys currently configured on the virtual machine.\n\nUse this endpoint to enable SSH key authentication for VPS instances.", "method": "POST", "path": "/api/vps/v1/virtual-machines/{virtualMachineId}/ssh-keys", "inputSchema": { "type": "object", "properties": { "virtualMachineId": { "type": "integer", "description": "Virtual Machine ID" }, "keys": { "type": "array", "description": "SSH public keys in OpenSSH format to add", "items": { "type": "string", "description": "keys parameter" } } }, "required": [ "virtualMachineId", "keys" ] }, "security": [ { "apiToken": [] } ], "group": "vps" }, { "name": "vps_ssh-keys_remove-virtual-machine", "title": "Remove virtual machine SSH keys", "annotations": { "title": "Remove virtual machine SSH keys", "readOnlyHint": false, "destructiveHint": true, "idempotentHint": true }, "description": "Remove one or more SSH public keys from a specified virtual machine.\n\nRemoved keys can no longer be used to authenticate via SSH as the `root` user.\nReturns the remaining list of SSH keys configured on the virtual machine.\n\nUse this endpoint to revoke SSH key access to VPS instances.", "method": "DELETE", "path": "/api/vps/v1/virtual-machines/{virtualMachineId}/ssh-keys", "inputSchema": { "type": "object", "properties": { "virtualMachineId": { "type": "integer", "description": "Virtual Machine ID" } }, "required": [ "virtualMachineId" ] }, "security": [ { "apiToken": [] } ], "group": "vps" }, { "name": "vps_templates_get", "title": "Get template details", "annotations": { "title": "Get template details", "readOnlyHint": true, "destructiveHint": false }, "description": "Retrieve detailed information about a specific OS template for virtual machines.\n\nUse this endpoint to view specific template specifications before deployment.", "method": "GET", "path": "/api/vps/v1/templates/{templateId}", "inputSchema": { "type": "object", "properties": { "templateId": { "type": "integer", "description": "Template ID" } }, "required": [ "templateId" ] }, "security": [ { "apiToken": [] } ], "group": "vps" }, { "name": "vps_templates_list", "title": "Get templates", "annotations": { "title": "Get templates", "readOnlyHint": true, "destructiveHint": false }, "description": "Retrieve available OS templates for virtual machines.\n\nUse this endpoint to view operating system options before creating or recreating VPS instances.", "method": "GET", "path": "/api/vps/v1/templates", "inputSchema": { "type": "object", "properties": {}, "required": [] }, "security": [ { "apiToken": [] } ], "group": "vps" }, { "name": "vps_actions_get", "title": "Get action details", "annotations": { "title": "Get action details", "readOnlyHint": true, "destructiveHint": false }, "description": "Retrieve detailed information about a specific action performed on a specified virtual machine.\n\nUse this endpoint to monitor specific VPS operation status and details.", "method": "GET", "path": "/api/vps/v1/virtual-machines/{virtualMachineId}/actions/{actionId}", "inputSchema": { "type": "object", "properties": { "virtualMachineId": { "type": "integer", "description": "Virtual Machine ID" }, "actionId": { "type": "integer", "description": "Action ID" } }, "required": [ "virtualMachineId", "actionId" ] }, "security": [ { "apiToken": [] } ], "group": "vps" }, { "name": "vps_actions_list", "title": "Get actions", "annotations": { "title": "Get actions", "readOnlyHint": true, "destructiveHint": false }, "description": "Retrieve actions performed on a specified virtual machine.\n\nActions are operations or events that have been executed on the virtual\nmachine, such as starting, stopping, or modifying the machine. This endpoint\nallows you to view the history of these actions, providing details about\neach action, such as the action name, timestamp, and status.\n\nUse this endpoint to view VPS operation history and troubleshoot issues.", "method": "GET", "path": "/api/vps/v1/virtual-machines/{virtualMachineId}/actions", "inputSchema": { "type": "object", "properties": { "virtualMachineId": { "type": "integer", "description": "Virtual Machine ID" }, "page": { "type": "integer", "description": "Page number" } }, "required": [ "virtualMachineId" ] }, "security": [ { "apiToken": [] } ], "group": "vps" }, { "name": "vps_virtual-machines_attached-public-keys", "title": "Get attached public keys", "annotations": { "title": "Get attached public keys", "readOnlyHint": true, "destructiveHint": false }, "description": "Deprecated: use `GET /api/vps/v1/virtual-machines/{virtualMachineId}/ssh-keys` instead.\n\nRetrieve public keys attached to a specified virtual machine.\n\nUse this endpoint to view SSH keys configured for specific VPS instances.", "method": "GET", "path": "/api/vps/v1/virtual-machines/{virtualMachineId}/public-keys", "inputSchema": { "type": "object", "properties": { "virtualMachineId": { "type": "integer", "description": "Virtual Machine ID" }, "page": { "type": "integer", "description": "Page number" } }, "required": [ "virtualMachineId" ] }, "security": [ { "apiToken": [] } ], "group": "vps" }, { "name": "vps_backups_list", "title": "Get backups", "annotations": { "title": "Get backups", "readOnlyHint": true, "destructiveHint": false }, "description": "Retrieve backups for a specified virtual machine.\n\nUse this endpoint to view available backup points for VPS data recovery.", "method": "GET", "path": "/api/vps/v1/virtual-machines/{virtualMachineId}/backups", "inputSchema": { "type": "object", "properties": { "virtualMachineId": { "type": "integer", "description": "Virtual Machine ID" }, "page": { "type": "integer", "description": "Page number" } }, "required": [ "virtualMachineId" ] }, "security": [ { "apiToken": [] } ], "group": "vps" }, { "name": "vps_backups_restore", "title": "Restore backup", "annotations": { "title": "Restore backup", "readOnlyHint": false, "destructiveHint": true }, "description": "Restore a backup for a specified virtual machine.\n\nThe system will then initiate the restore process, which may take some time depending on the size of the backup.\n\n**All data on the virtual machine will be overwritten with the data from the backup.**\n\nUse this endpoint to recover VPS data from backup points.", "method": "POST", "path": "/api/vps/v1/virtual-machines/{virtualMachineId}/backups/{backupId}/restore", "inputSchema": { "type": "object", "properties": { "virtualMachineId": { "type": "integer", "description": "Virtual Machine ID" }, "backupId": { "type": "integer", "description": "Backup ID" } }, "required": [ "virtualMachineId", "backupId" ] }, "security": [ { "apiToken": [] } ], "group": "vps" }, { "name": "vps_virtual-machines_set-hostname", "title": "Set hostname", "annotations": { "title": "Set hostname", "readOnlyHint": false, "destructiveHint": true, "idempotentHint": true }, "description": "Set hostname for a specified virtual machine.\n\nChanging hostname does not update PTR record automatically.\nIf you want your virtual machine to be reachable by a hostname, \nyou need to point your domain A/AAAA records to virtual machine IP as well.\n\nUse this endpoint to configure custom hostnames for VPS instances.", "method": "PUT", "path": "/api/vps/v1/virtual-machines/{virtualMachineId}/hostname", "inputSchema": { "type": "object", "properties": { "virtualMachineId": { "type": "integer", "description": "Virtual Machine ID" }, "hostname": { "type": "string", "description": "hostname parameter" } }, "required": [ "virtualMachineId", "hostname" ] }, "security": [ { "apiToken": [] } ], "group": "vps" }, { "name": "vps_virtual-machines_reset-hostname", "title": "Reset hostname", "annotations": { "title": "Reset hostname", "readOnlyHint": false, "destructiveHint": true, "idempotentHint": true }, "description": "Reset hostname and PTR record of a specified virtual machine to default value.\n\nUse this endpoint to restore default hostname configuration for VPS instances.", "method": "DELETE", "path": "/api/vps/v1/virtual-machines/{virtualMachineId}/hostname", "inputSchema": { "type": "object", "properties": { "virtualMachineId": { "type": "integer", "description": "Virtual Machine ID" } }, "required": [ "virtualMachineId" ] }, "security": [ { "apiToken": [] } ], "group": "vps" }, { "name": "vps_virtual-machines_get", "title": "Get virtual machine details", "annotations": { "title": "Get virtual machine details", "readOnlyHint": true, "destructiveHint": false }, "description": "Retrieve detailed information about a specified virtual machine.\n\nUse this endpoint to view comprehensive VPS configuration and status.", "method": "GET", "path": "/api/vps/v1/virtual-machines/{virtualMachineId}", "inputSchema": { "type": "object", "properties": { "virtualMachineId": { "type": "integer", "description": "Virtual Machine ID" } }, "required": [ "virtualMachineId" ] }, "security": [ { "apiToken": [] } ], "group": "vps" }, { "name": "vps_virtual-machines_list", "title": "Get virtual machines", "annotations": { "title": "Get virtual machines", "readOnlyHint": true, "destructiveHint": false }, "description": "Retrieve all available virtual machines.\n\nUse this endpoint to view available VPS instances.", "method": "GET", "path": "/api/vps/v1/virtual-machines", "inputSchema": { "type": "object", "properties": {}, "required": [] }, "security": [ { "apiToken": [] } ], "group": "vps" }, { "name": "vps_virtual-machines_purchase", "title": "Purchase new virtual machine", "annotations": { "title": "Purchase new virtual machine", "readOnlyHint": false, "destructiveHint": false }, "description": "Purchase and setup a new virtual machine.\n\nIf virtual machine setup fails for any reason, login to\n[hPanel](https://hpanel.hostinger.com/) and complete the setup manually.\n\nIf no payment method is provided, your default payment method will be used automatically.\n\nIf the response is `202 Accepted`, the payment is still being processed and the virtual machine\nwas not set up. Login to\n[hPanel](https://hpanel.hostinger.com/) and complete the setup manually.\n\nUse this endpoint to create new VPS instances.", "method": "POST", "path": "/api/vps/v1/virtual-machines", "inputSchema": { "type": "object", "properties": { "item_id": { "type": "string", "description": "Catalog price item ID" }, "payment_method_id": { "type": "integer", "description": "Payment method ID, default will be used if not provided" }, "setup": { "type": "string", "description": "setup parameter" }, "coupons": { "type": "array", "description": "Discount coupon codes", "items": { "type": "string", "description": "coupons parameter" } } }, "required": [ "item_id", "setup" ] }, "security": [ { "apiToken": [] } ], "group": "vps" }, { "name": "vps_monarx_scan-metrics", "title": "Get scan metrics", "annotations": { "title": "Get scan metrics", "readOnlyHint": true, "destructiveHint": false }, "description": "Retrieve scan metrics for the [Monarx](https://www.monarx.com/) malware scanner\ninstalled on a specified virtual machine.\n\nThe scan metrics provide detailed information about malware scans performed\nby Monarx, including number of scans, detected threats, and other relevant\nstatistics. This information is useful for monitoring security status of the\nvirtual machine and assessing effectiveness of the malware scanner.\n\nUse this endpoint to monitor VPS security scan results and threat detection.", "method": "GET", "path": "/api/vps/v1/virtual-machines/{virtualMachineId}/monarx", "inputSchema": { "type": "object", "properties": { "virtualMachineId": { "type": "integer", "description": "Virtual Machine ID" } }, "required": [ "virtualMachineId" ] }, "security": [ { "apiToken": [] } ], "group": "vps" }, { "name": "vps_monarx_install", "title": "Install Monarx", "annotations": { "title": "Install Monarx", "readOnlyHint": false, "destructiveHint": false }, "description": "Install the Monarx malware scanner on a specified virtual machine.\n\n[Monarx](https://www.monarx.com/) is a security tool designed to detect and\nprevent malware infections on virtual machines. By installing Monarx, users\ncan enhance the security of their virtual machines, ensuring that they are\nprotected against malicious software.\n\nUse this endpoint to enable malware protection on VPS instances.", "method": "POST", "path": "/api/vps/v1/virtual-machines/{virtualMachineId}/monarx", "inputSchema": { "type": "object", "properties": { "virtualMachineId": { "type": "integer", "description": "Virtual Machine ID" } }, "required": [ "virtualMachineId" ] }, "security": [ { "apiToken": [] } ], "group": "vps" }, { "name": "vps_monarx_uninstall", "title": "Uninstall Monarx", "annotations": { "title": "Uninstall Monarx", "readOnlyHint": false, "destructiveHint": true, "idempotentHint": true }, "description": "Uninstall the Monarx malware scanner on a specified virtual machine.\n\nIf Monarx is not installed, the request will still be processed without any effect.\n\nUse this endpoint to remove malware scanner from VPS instances.", "method": "DELETE", "path": "/api/vps/v1/virtual-machines/{virtualMachineId}/monarx", "inputSchema": { "type": "object", "properties": { "virtualMachineId": { "type": "integer", "description": "Virtual Machine ID" } }, "required": [ "virtualMachineId" ] }, "security": [ { "apiToken": [] } ], "group": "vps" }, { "name": "vps_virtual-machines_metrics", "title": "Get metrics", "annotations": { "title": "Get metrics", "readOnlyHint": true, "destructiveHint": false }, "description": "Retrieve historical metrics for a specified virtual machine.\n\nIt includes the following metrics: \n- CPU usage\n- Memory usage\n- Disk usage\n- Network usage\n- Uptime\n\nUse this endpoint to monitor VPS performance and resource utilization over time.", "method": "GET", "path": "/api/vps/v1/virtual-machines/{virtualMachineId}/metrics", "inputSchema": { "type": "object", "properties": { "virtualMachineId": { "type": "integer", "description": "Virtual Machine ID" }, "date_from": { "type": "string", "description": "date_from parameter" }, "date_to": { "type": "string", "description": "date_to parameter" } }, "required": [ "virtualMachineId", "date_from", "date_to" ] }, "security": [ { "apiToken": [] } ], "group": "vps" }, { "name": "vps_virtual-machines_set-nameservers", "title": "Set nameservers", "annotations": { "title": "Set nameservers", "readOnlyHint": false, "destructiveHint": true, "idempotentHint": true }, "description": "Set nameservers for a specified virtual machine.\n\nBe aware, that improper nameserver configuration can lead to the virtual\nmachine being unable to resolve domain names.\n\nUse this endpoint to configure custom DNS resolvers for VPS instances.", "method": "PUT", "path": "/api/vps/v1/virtual-machines/{virtualMachineId}/nameservers", "inputSchema": { "type": "object", "properties": { "virtualMachineId": { "type": "integer", "description": "Virtual Machine ID" }, "ns1": { "type": "string", "description": "ns1 parameter" }, "ns2": { "type": "string", "description": "ns2 parameter" }, "ns3": { "type": "string", "description": "ns3 parameter" } }, "required": [ "virtualMachineId", "ns1" ] }, "security": [ { "apiToken": [] } ], "group": "vps" }, { "name": "vps_ptr_create", "title": "Create PTR record", "annotations": { "title": "Create PTR record", "readOnlyHint": false, "destructiveHint": false }, "description": "Create or update a PTR (Pointer) record for a specified virtual machine.\n\nUse this endpoint to configure reverse DNS lookup for VPS IP addresses.", "method": "POST", "path": "/api/vps/v1/virtual-machines/{virtualMachineId}/ptr/{ipAddressId}", "inputSchema": { "type": "object", "properties": { "virtualMachineId": { "type": "integer", "description": "Virtual Machine ID" }, "ipAddressId": { "type": "integer", "description": "IP Address ID" }, "domain": { "type": "string", "description": "Pointer record domain" } }, "required": [ "virtualMachineId", "ipAddressId", "domain" ] }, "security": [ { "apiToken": [] } ], "group": "vps" }, { "name": "vps_ptr_delete", "title": "Delete PTR record", "annotations": { "title": "Delete PTR record", "readOnlyHint": false, "destructiveHint": true, "idempotentHint": true }, "description": "Delete a PTR (Pointer) record for a specified virtual machine.\n\nOnce deleted, reverse DNS lookups to the virtual machine's IP address will\nno longer return the previously configured hostname.\n\nUse this endpoint to remove reverse DNS configuration from VPS instances.", "method": "DELETE", "path": "/api/vps/v1/virtual-machines/{virtualMachineId}/ptr/{ipAddressId}", "inputSchema": { "type": "object", "properties": { "virtualMachineId": { "type": "integer", "description": "Virtual Machine ID" }, "ipAddressId": { "type": "integer", "description": "IP Address ID" } }, "required": [ "virtualMachineId", "ipAddressId" ] }, "security": [ { "apiToken": [] } ], "group": "vps" }, { "name": "vps_virtual-machines_set-panel-password", "title": "Set panel password", "annotations": { "title": "Set panel password", "readOnlyHint": false, "destructiveHint": true, "idempotentHint": true }, "description": "Set panel password for a specified virtual machine.\n\nIf virtual machine does not use panel OS, the request will still be processed without any effect.\nRequirements for password are same as in the [recreate virtual machine\nendpoint](/#tag/vps-virtual-machine/POST/api/vps/v1/virtual-machines/{virtualMachineId}/recreate).\n\nUse this endpoint to configure control panel access credentials for VPS instances.", "method": "PUT", "path": "/api/vps/v1/virtual-machines/{virtualMachineId}/panel-password", "inputSchema": { "type": "object", "properties": { "virtualMachineId": { "type": "integer", "description": "Virtual Machine ID" }, "password": { "type": "string", "description": "Panel password for the virtual machine" } }, "required": [ "virtualMachineId", "password" ] }, "security": [ { "apiToken": [] } ], "group": "vps" }, { "name": "vps_recovery_start", "title": "Start recovery mode", "annotations": { "title": "Start recovery mode", "readOnlyHint": false, "destructiveHint": false }, "description": "Initiate recovery mode for a specified virtual machine.\n\nRecovery mode is a special state that allows users to perform system rescue operations, \nsuch as repairing file systems, recovering data, or troubleshooting issues that prevent the virtual machine \nfrom booting normally. \n\nVirtual machine will boot recovery disk image and original disk image will be mounted in `/mnt` directory.\n\nUse this endpoint to enable system rescue operations on VPS instances.", "method": "POST", "path": "/api/vps/v1/virtual-machines/{virtualMachineId}/recovery", "inputSchema": { "type": "object", "properties": { "virtualMachineId": { "type": "integer", "description": "Virtual Machine ID" }, "root_password": { "type": "string", "description": "Temporary root password for recovery mode" } }, "required": [ "virtualMachineId", "root_password" ] }, "security": [ { "apiToken": [] } ], "group": "vps" }, { "name": "vps_recovery_stop", "title": "Stop recovery mode", "annotations": { "title": "Stop recovery mode", "readOnlyHint": false, "destructiveHint": true, "idempotentHint": true }, "description": "Stop recovery mode for a specified virtual machine.\n\nIf virtual machine is not in recovery mode, this operation will fail.\n\nUse this endpoint to exit system rescue mode and return VPS to normal operation.", "method": "DELETE", "path": "/api/vps/v1/virtual-machines/{virtualMachineId}/recovery", "inputSchema": { "type": "object", "properties": { "virtualMachineId": { "type": "integer", "description": "Virtual Machine ID" } }, "required": [ "virtualMachineId" ] }, "security": [ { "apiToken": [] } ], "group": "vps" }, { "name": "vps_virtual-machines_recreate", "title": "Recreate virtual machine", "annotations": { "title": "Recreate virtual machine", "readOnlyHint": false, "destructiveHint": true }, "description": "Recreate a virtual machine from scratch.\n\nThe recreation process involves reinstalling the operating system and\nresetting the virtual machine to its initial state.\nSnapshots, if there are any, will be deleted.\n\n## Password Requirements\nPassword will be checked against leaked password databases. \nRequirements for the password are:\n- At least 12 characters long\n- At least one uppercase letter\n- At least one lowercase letter\n- At least one number\n- Is not leaked publicly\n\n**This operation is irreversible and will result in the loss of all data stored on the virtual machine!**\n\nUse this endpoint to completely rebuild VPS instances with fresh OS installation.", "method": "POST", "path": "/api/vps/v1/virtual-machines/{virtualMachineId}/recreate", "inputSchema": { "type": "object", "properties": { "virtualMachineId": { "type": "integer", "description": "Virtual Machine ID" }, "template_id": { "type": "integer", "description": "Template ID" }, "password": { "type": "string", "description": "Root password for the virtual machine. If not provided, random password will be generated.\nPassword will not be shown in the response." }, "panel_password": { "type": "string", "description": "Panel password for the panel-based OS template. If not provided, random password will be generated.\nIf OS does not support panel_password this field will be ignored.\nPassword will not be shown in the response." }, "post_install_script_id": { "type": "integer", "description": "Post-install script to execute after virtual machine was recreated" } }, "required": [ "virtualMachineId", "template_id" ] }, "security": [ { "apiToken": [] } ], "group": "vps" }, { "name": "vps_virtual-machines_restart", "title": "Restart virtual machine", "annotations": { "title": "Restart virtual machine", "readOnlyHint": false, "destructiveHint": false }, "description": "Restart a specified virtual machine by fully stopping and starting it.\n\nIf the virtual machine was stopped, it will be started.\n\nUse this endpoint to reboot VPS instances.", "method": "POST", "path": "/api/vps/v1/virtual-machines/{virtualMachineId}/restart", "inputSchema": { "type": "object", "properties": { "virtualMachineId": { "type": "integer", "description": "Virtual Machine ID" } }, "required": [ "virtualMachineId" ] }, "security": [ { "apiToken": [] } ], "group": "vps" }, { "name": "vps_virtual-machines_set-root-password", "title": "Set root password", "annotations": { "title": "Set root password", "readOnlyHint": false, "destructiveHint": true, "idempotentHint": true }, "description": "Set root password for a specified virtual machine.\n\nRequirements for password are same as in the [recreate virtual machine\nendpoint](/#tag/vps-virtual-machine/POST/api/vps/v1/virtual-machines/{virtualMachineId}/recreate).\n\nUse this endpoint to update administrator credentials for VPS instances.", "method": "PUT", "path": "/api/vps/v1/virtual-machines/{virtualMachineId}/root-password", "inputSchema": { "type": "object", "properties": { "virtualMachineId": { "type": "integer", "description": "Virtual Machine ID" }, "password": { "type": "string", "description": "Root password for the virtual machine" } }, "required": [ "virtualMachineId", "password" ] }, "security": [ { "apiToken": [] } ], "group": "vps" }, { "name": "vps_virtual-machines_setup", "title": "Setup purchased virtual machine", "annotations": { "title": "Setup purchased virtual machine", "readOnlyHint": false, "destructiveHint": false }, "description": "Setup newly purchased virtual machine with `initial` state.\n\nUse this endpoint to configure and initialize purchased VPS instances.", "method": "POST", "path": "/api/vps/v1/virtual-machines/{virtualMachineId}/setup", "inputSchema": { "type": "object", "properties": { "virtualMachineId": { "type": "integer", "description": "Virtual Machine ID" }, "template_id": { "type": "integer", "description": "Template ID" }, "data_center_id": { "type": "integer", "description": "Data center ID" }, "post_install_script_id": { "type": "integer", "description": "Post-install script ID" }, "password": { "type": "string", "description": "Password for the virtual machine. If not provided, random password will be generated.\nPassword will not be shown in the response." }, "hostname": { "type": "string", "description": "Override default hostname of the virtual machine" }, "install_monarx": { "type": "boolean", "description": "Install Monarx malware scanner (if supported)" }, "enable_backups": { "type": "boolean", "description": "Enable weekly backup schedule" }, "ns1": { "type": "string", "description": "Name server 1" }, "ns2": { "type": "string", "description": "Name server 2" }, "public_key": { "type": "object", "description": "Use SSH key", "properties": { "name": { "type": "string", "description": "Name of the SSH key" }, "key": { "type": "string", "description": "Contents of the SSH key" } } } }, "required": [ "virtualMachineId", "data_center_id", "template_id" ] }, "security": [ { "apiToken": [] } ], "group": "vps" }, { "name": "vps_snapshots_get", "title": "Get snapshot", "annotations": { "title": "Get snapshot", "readOnlyHint": true, "destructiveHint": false }, "description": "Retrieve snapshot for a specified virtual machine.\n\nUse this endpoint to view current VPS snapshot information.", "method": "GET", "path": "/api/vps/v1/virtual-machines/{virtualMachineId}/snapshot", "inputSchema": { "type": "object", "properties": { "virtualMachineId": { "type": "integer", "description": "Virtual Machine ID" } }, "required": [ "virtualMachineId" ] }, "security": [ { "apiToken": [] } ], "group": "vps" }, { "name": "vps_snapshots_create", "title": "Create snapshot", "annotations": { "title": "Create snapshot", "readOnlyHint": false, "destructiveHint": false }, "description": "Create a snapshot of a specified virtual machine.\n\nA snapshot captures the state and data of the virtual machine at a specific point in time, \nallowing users to restore the virtual machine to that state if needed. \nThis operation is useful for backup purposes, system recovery, \nand testing changes without affecting the current state of the virtual machine.\n\n**Creating new snapshot will overwrite the existing snapshot!**\n\nUse this endpoint to capture VPS state for backup and recovery purposes.", "method": "POST", "path": "/api/vps/v1/virtual-machines/{virtualMachineId}/snapshot", "inputSchema": { "type": "object", "properties": { "virtualMachineId": { "type": "integer", "description": "Virtual Machine ID" } }, "required": [ "virtualMachineId" ] }, "security": [ { "apiToken": [] } ], "group": "vps" }, { "name": "vps_snapshots_delete", "title": "Delete snapshot", "annotations": { "title": "Delete snapshot", "readOnlyHint": false, "destructiveHint": true, "idempotentHint": true }, "description": "Delete a snapshot of a specified virtual machine.\n\nUse this endpoint to remove VPS snapshots.", "method": "DELETE", "path": "/api/vps/v1/virtual-machines/{virtualMachineId}/snapshot", "inputSchema": { "type": "object", "properties": { "virtualMachineId": { "type": "integer", "description": "Virtual Machine ID" } }, "required": [ "virtualMachineId" ] }, "security": [ { "apiToken": [] } ], "group": "vps" }, { "name": "vps_snapshots_restore", "title": "Restore snapshot", "annotations": { "title": "Restore snapshot", "readOnlyHint": false, "destructiveHint": true }, "description": "Restore a specified virtual machine to a previous state using a snapshot.\n\nRestoring from a snapshot allows users to revert the virtual machine to that state,\nwhich is useful for system recovery, undoing changes, or testing.\n\nUse this endpoint to revert VPS instances to previous saved states.", "method": "POST", "path": "/api/vps/v1/virtual-machines/{virtualMachineId}/snapshot/restore", "inputSchema": { "type": "object", "properties": { "virtualMachineId": { "type": "integer", "description": "Virtual Machine ID" } }, "required": [ "virtualMachineId" ] }, "security": [ { "apiToken": [] } ], "group": "vps" }, { "name": "vps_virtual-machines_start", "title": "Start virtual machine", "annotations": { "title": "Start virtual machine", "readOnlyHint": false, "destructiveHint": false }, "description": "Start a specified virtual machine.\n\nIf the virtual machine is already running, the request will still be processed without any effect.\n\nUse this endpoint to power on stopped VPS instances.", "method": "POST", "path": "/api/vps/v1/virtual-machines/{virtualMachineId}/start", "inputSchema": { "type": "object", "properties": { "virtualMachineId": { "type": "integer", "description": "Virtual Machine ID" } }, "required": [ "virtualMachineId" ] }, "security": [ { "apiToken": [] } ], "group": "vps" }, { "name": "vps_virtual-machines_stop", "title": "Stop virtual machine", "annotations": { "title": "Stop virtual machine", "readOnlyHint": false, "destructiveHint": true }, "description": "Stop a specified virtual machine.\n\nIf the virtual machine is already stopped, the request will still be processed without any effect.\n\nThis is a compute-only power state change and does not affect billing. To stop future charges,\ndisable auto-renewal on the owning subscription.\n\nUse this endpoint to power off running VPS instances.", "method": "POST", "path": "/api/vps/v1/virtual-machines/{virtualMachineId}/stop", "inputSchema": { "type": "object", "properties": { "virtualMachineId": { "type": "integer", "description": "Virtual Machine ID" } }, "required": [ "virtualMachineId" ] }, "security": [ { "apiToken": [] } ], "group": "vps" }, { "name": "wordpress_ai-content_generate-images", "title": "Generate images", "annotations": { "title": "Generate images", "readOnlyHint": false, "destructiveHint": false }, "description": "Start generating one or more images from a prompt and an image type for the specified\nWordPress installation. The generation runs asynchronously: the response is returned\nright away with `status: in-progress` and a `generation_id`. Poll\nGET /api/hosting/v1/accounts/{username}/wordpress/{software}/content/generations/{generation_id}\nevery few seconds until `status` is `completed` or `failed`.\n\nA completed generation returns temporary image URLs together with the time they expire;\ndownload the images before then. Images match the requested aspect ratio and are never\nsmaller than the requested size; logos are transparent images cropped to the mark.\n\nOnly one image generation can run per installation at a time: while one is still in\nprogress the endpoint returns 409 without the ID of the running generation, so a caller\nthat did not receive the `202` has to wait for it to finish (up to a few minutes) before\nstarting a new one. The endpoint is limited to 10 requests per minute.\n\nProvide the WordPress installation (software) identifier in the path. It can\nbe obtained from GET /api/hosting/v1/wordpress/installations (the `id` field).", "method": "POST", "path": "/api/hosting/v1/accounts/{username}/wordpress/{software}/content/images/generate", "inputSchema": { "type": "object", "properties": { "username": { "type": "string", "description": "username parameter" }, "software": { "type": "string", "description": "WordPress installation (software) identifier" }, "prompt": { "type": "string", "description": "What the image should show. For the logo type, the wordmark and mark to render." }, "image_type": { "type": "string", "description": "Kind of image to generate. It sets the default size and cropping.", "enum": [ "hero", "background", "inline", "gallery", "product", "logo" ] }, "num_of_images": { "type": "integer", "description": "How many images to generate" }, "width": { "type": "integer", "description": "Output width in pixels. Defaults per image type and is ignored for the logo type." }, "height": { "type": "integer", "description": "Output height in pixels. Defaults per image type and is ignored for the logo type." }, "style": { "type": "string", "description": "Style tokens appended to photographic prompts. Ignored for the logo type." }, "color_guidance": { "type": "string", "description": "Colour direction for the logo type only. It is not rendered as text." } }, "required": [ "username", "software", "prompt", "image_type" ] }, "security": [ { "apiToken": [] } ], "group": "wordpress" }, { "name": "wordpress_ai-content_generation-result", "title": "Get generation result", "annotations": { "title": "Get generation result", "readOnlyHint": true, "destructiveHint": false }, "description": "Get the result of an AI content generation started for the specified WordPress\ninstallation, such as an image generation started with\nPOST /api/hosting/v1/accounts/{username}/wordpress/{software}/content/images/generate.\n\nWhile the generation is still running only `status: in-progress` is returned; poll every\nfew seconds. Once `completed`, `result` holds the generated content shaped according to\n`type`: temporary image URLs together with the time they expire for `image-generation`, or\nthe generated website document for `website-generation` (started from the Hostinger\nWordPress plugin). A `failed` generation has no `result`. Unknown or expired generation\nIDs return 404.\n\nProvide the WordPress installation (software) identifier in the path. It can\nbe obtained from GET /api/hosting/v1/wordpress/installations (the `id` field).", "method": "GET", "path": "/api/hosting/v1/accounts/{username}/wordpress/{software}/content/generations/{generation_id}", "inputSchema": { "type": "object", "properties": { "username": { "type": "string", "description": "username parameter" }, "software": { "type": "string", "description": "WordPress installation (software) identifier" }, "generation_id": { "type": "string", "description": "Generation ID returned when the generation was started" }, "type": { "type": "string", "description": "Generation type to look up. When omitted, every generation type is checked.", "enum": [ "website-generation", "image-generation" ] } }, "required": [ "username", "software", "generation_id" ] }, "security": [ { "apiToken": [] } ], "group": "wordpress" }, { "name": "wordpress_ai-tools_show-option-status", "title": "Show AI option status", "annotations": { "title": "Show AI option status", "readOnlyHint": true, "destructiveHint": false }, "description": "Show the current AI option status for the Hostinger Tools plugin on the\nspecified WordPress installation. Filter by `option` to return a single\noption, or omit it to return all options.\n\nProvide the WordPress installation (software) identifier in the path. It can\nbe obtained from GET /api/hosting/v1/wordpress/installations (the `id` field).", "method": "GET", "path": "/api/hosting/v1/accounts/{username}/wordpress/{software}/hostinger-plugins/ai-option/status", "inputSchema": { "type": "object", "properties": { "username": { "type": "string", "description": "username parameter" }, "software": { "type": "string", "description": "WordPress installation (software) identifier" }, "option": { "type": "string", "description": "Filter the status by a single AI option.", "enum": [ "llmstxt", "web2agent" ] } }, "required": [ "username", "software" ] }, "security": [ { "apiToken": [] } ], "group": "wordpress" }, { "name": "wordpress_ai-tools_set-option-status", "title": "Set AI option status", "annotations": { "title": "Set AI option status", "readOnlyHint": false, "destructiveHint": true, "idempotentHint": true }, "description": "Enable or disable an AI option for the Hostinger Tools plugin on the specified\nWordPress installation.\n\nProvide the WordPress installation (software) identifier in the path. It can\nbe obtained from GET /api/hosting/v1/wordpress/installations (the `id` field).", "method": "PATCH", "path": "/api/hosting/v1/accounts/{username}/wordpress/{software}/hostinger-plugins/ai-option/status", "inputSchema": { "type": "object", "properties": { "username": { "type": "string", "description": "username parameter" }, "software": { "type": "string", "description": "WordPress installation (software) identifier" }, "option": { "type": "string", "description": "AI option name", "enum": [ "llmstxt", "web2agent" ] }, "enable": { "type": "boolean", "description": "Enable (true) or disable (false) the AI option." } }, "required": [ "username", "software", "option", "enable" ] }, "security": [ { "apiToken": [] } ], "group": "wordpress" }, { "name": "wordpress_installations_check-if-are-valid", "title": "Check if WordPress installations are valid", "annotations": { "title": "Check if WordPress installations are valid", "readOnlyHint": true, "destructiveHint": false }, "description": "Check whether one or more WordPress installations are valid and working\ncorrectly. Detects broken installations caused by missing files, broken\nplugins, themes and similar issues.\n\nProvide the WordPress installation (software) identifiers in the body. They\ncan be obtained from GET /api/hosting/v1/wordpress/installations (the `id`\nfield).", "method": "POST", "path": "/api/hosting/v1/accounts/{username}/wordpress/installations/check-is-valid", "inputSchema": { "type": "object", "properties": { "username": { "type": "string", "description": "username parameter" }, "software_ids": { "type": "array", "description": "WordPress installation (software) identifiers to validate.", "items": { "type": "string", "description": "Software identifier" } }, "force": { "type": "boolean", "description": "Force fresh validation without cache. Preferable for troubleshooting purposes." } }, "required": [ "username", "software_ids" ] }, "security": [ { "apiToken": [] } ], "group": "wordpress" }, { "name": "wordpress_installations_delete", "title": "Delete WordPress installation", "annotations": { "title": "Delete WordPress installation", "readOnlyHint": false, "destructiveHint": true, "idempotentHint": true }, "description": "Delete the specified WordPress installation, with optional file and database\nremoval. This removes all associated components including plugins, themes,\nstaging websites and any other related data.\n\nProvide the WordPress installation (software) identifier in the path. It can\nbe obtained from GET /api/hosting/v1/wordpress/installations (the `id` field).", "method": "DELETE", "path": "/api/hosting/v1/accounts/{username}/wordpress/{software}", "inputSchema": { "type": "object", "properties": { "username": { "type": "string", "description": "username parameter" }, "software": { "type": "string", "description": "WordPress installation (software) identifier" } }, "required": [ "username", "software" ] }, "security": [ { "apiToken": [] } ], "group": "wordpress" }, { "name": "wordpress_installations_detect", "title": "Detect WordPress installations", "annotations": { "title": "Detect WordPress installations", "readOnlyHint": false, "destructiveHint": false }, "description": "Trigger a background scan to detect WordPress installations for the account.\n\nThis operation is asynchronous: a successful response only means the scan has\nbeen queued. Poll GET /api/hosting/v1/wordpress/installations to fetch the\ndetected installations once the scan completes.", "method": "POST", "path": "/api/hosting/v1/accounts/{username}/wordpress/installations/detect", "inputSchema": { "type": "object", "properties": { "username": { "type": "string", "description": "username parameter" } }, "required": [ "username" ] }, "security": [ { "apiToken": [] } ], "group": "wordpress" }, { "name": "wordpress_installations_import-website", "title": "Import WordPress website", "annotations": { "title": "Import WordPress website", "readOnlyHint": false, "destructiveHint": true }, "description": "Import WordPress website to the specified domain.\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 import a WordPress website from archive and\ndatabase files that have been uploaded to the website's directory.", "method": "POST", "path": "/api/hosting/v1/accounts/{username}/websites/{domain}/wordpress/import", "inputSchema": { "type": "object", "properties": { "username": { "type": "string", "description": "username parameter" }, "domain": { "type": "string", "description": "Domain name" }, "archive_path": { "type": "string", "description": "Path to the WordPress archive file (relative to website root)" }, "sql_path": { "type": "string", "description": "Path to the database SQL file (relative to website root)" } }, "required": [ "username", "domain", "archive_path", "sql_path" ] }, "security": [ { "apiToken": [] } ], "group": "wordpress", "hidden": true }, { "name": "wordpress_installations_install", "title": "Install WordPress", "annotations": { "title": "Install WordPress", "readOnlyHint": false, "destructiveHint": false }, "description": "Install WordPress on an existing website.\n\nThe website must already exist before calling this endpoint. To create a new\nwebsite first, use POST /api/hosting/v1/orders/{order_id}/onboardings\n(`hosting_websites_start-setup`) and poll GET /api/hosting/v1/onboardings\n(`hosting_websites_list-setups`) with the `domain` filter until its `status` is\n`completed`.\n\nSend `type: headless` to turn a headless website (for example one created by\n`hosting_websites_start-setup` with `type: headless_empty`) into a headless WordPress\nwebsite: WordPress is installed into the `cms` directory with the Hostinger headless\nMU plugin and the website is marked as a headless WordPress website. `directory` is\nnot allowed with it. The target website must already be headless: the headless\ninstall rewrites the root `.htaccess`, so on any other website the request is\nrejected with 422.\n\nCall GET /api/hosting/v1/wordpress/installations (`wordpress_installations_list`)\nfiltered by username and domain before proceeding to check whether WordPress is\nalready installed on the target domain/path. If WordPress already exists and\n`overwrite` is false (the default), the async job will fail.\n\nThis operation is asynchronous: a successful response only means the install\njob has been queued, not that WordPress is ready. Installation typically\ntakes 1-2 minutes. Poll GET /api/hosting/v1/wordpress/installations\n(`wordpress_installations_list`) filtered by username and domain to track\nprogress. When the installation appears in that list, WordPress is ready.\n\nReturns 422 when the account already uses all the databases its plan allows,\nunless `database.name` is an existing database on the account.", "method": "POST", "path": "/api/hosting/v1/accounts/{username}/wordpress/installations", "inputSchema": { "type": "object", "properties": { "username": { "type": "string", "description": "username parameter" }, "domain": { "type": "string", "description": "Domain of the existing website where WordPress will be installed" }, "site_title": { "type": "string", "description": "Title of the WordPress site" }, "language": { "type": "string", "description": "WordPress locale. Defaults to en_US when omitted." }, "type": { "type": "string", "description": "Installation kind; `default` when omitted. `headless` installs WordPress into the `cms` directory with the Hostinger headless MU plugin and marks the website as a headless WordPress website. Accepted only for a website that is already headless, e.g. one created by `POST /api/hosting/v1/orders/{order_id}/onboardings` (`hosting_websites_start-setup`) with `type: headless_empty`; any other website is rejected with 422.", "enum": [ "default", "headless" ] }, "directory": { "type": "string", "description": "Installation subdirectory relative to the document root; omit for the root. Not allowed with `type: headless`, which always installs into `cms`." }, "overwrite": { "type": "boolean", "description": "When false (default), does not replace an existing installation. If WordPress is already installed on the domain/path, the async install job fails unless true." }, "auto_updates": { "type": "string", "description": "WordPress core auto-update policy", "enum": [ "all", "none", "minor" ] }, "version": { "type": "string", "description": "WordPress core version to install. If omitted, the latest core version compatible with the account vhost PHP version is selected." }, "credentials": { "type": "object", "description": "WordPress admin credentials", "properties": { "email": { "type": "string", "description": "email parameter" }, "login": { "type": "string", "description": "WordPress admin username" }, "password": { "type": "string", "description": "password parameter" } }, "required": [ "email", "login", "password" ] }, "database": { "type": "object", "description": "Optional. If the named database already exists on the account, it is used for this WordPress install. Otherwise a new database is created with this name, or with a generated name when database is omitted or null. A new database gets a random database user and counts toward the plan's database limit.", "properties": { "name": { "type": "string", "description": "Database name (username prefix added if missing)" }, "password": { "type": "string", "description": "Password for a new database. Random when omitted or null. Ignored when the named database already exists." } } } }, "required": [ "username", "domain", "site_title", "credentials" ] }, "security": [ { "apiToken": [] } ], "group": "wordpress" }, { "name": "wordpress_installations_list", "title": "List WordPress installations", "annotations": { "title": "List WordPress installations", "readOnlyHint": true, "destructiveHint": false }, "description": "List WordPress installations on shared and cloud web hosting accounts (the\n`/api/hosting/v1` family, identified by `username`) accessible to the\nauthenticated client.\n\nAgency Plan websites are not included. To work with WordPress on an Agency Plan\nwebsite, list them with GET /api/agency-hosting/v1/websites?website_types=wordpress\nand read their details with\nGET /api/agency-hosting/v1/websites/{website_uid}/wordpress/settings. An account\nthat only has Agency Plan websites receives an empty list from this endpoint.\n\nUse this endpoint to discover existing WordPress installations and to poll\nfor installation status after calling the install endpoint. When a newly\nrequested installation appears in this list, WordPress is ready. Filter by\nusername and domain to narrow results to a specific website.\n\nEach installation includes a `valid` flag and, when invalid, a\n`validationError` describing why.", "method": "GET", "path": "/api/hosting/v1/wordpress/installations", "inputSchema": { "type": "object", "properties": { "username": { "type": "string", "description": "Filter by specific username" }, "domain": { "type": "string", "description": "Filter by domain name (case-insensitive substring match)" }, "ownership": { "type": "string", "description": "Filter by ownership type. Defaults to \"owned\". Use \"all\" to include both owned and managed installations.", "enum": [ "owned", "managed", "all" ] } }, "required": [] }, "security": [ { "apiToken": [] } ], "group": "wordpress" }, { "name": "wordpress_installations_list-core-updates", "title": "List available WordPress core updates", "annotations": { "title": "List available WordPress core updates", "readOnlyHint": true, "destructiveHint": false }, "description": "List available WordPress core updates for the specified installation.\n\nProvide the WordPress installation (software) identifier in the path. It can\nbe obtained from GET /api/hosting/v1/wordpress/installations (the `id` field).", "method": "GET", "path": "/api/hosting/v1/accounts/{username}/wordpress/{software}/updates", "inputSchema": { "type": "object", "properties": { "username": { "type": "string", "description": "username parameter" }, "software": { "type": "string", "description": "WordPress installation (software) identifier" } }, "required": [ "username", "software" ] }, "security": [ { "apiToken": [] } ], "group": "wordpress" }, { "name": "wordpress_installations_jwt-token", "title": "Get installation JWT token", "annotations": { "title": "Get installation JWT token", "readOnlyHint": true, "destructiveHint": false }, "description": "Return a JWT token used to authenticate requests against the specified\nWordPress installation, including its MCP (Model Context Protocol) endpoint.\n\nProvide the WordPress installation (software) identifier in the path. It can\nbe obtained from GET /api/hosting/v1/wordpress/installations (the `id` field).", "method": "GET", "path": "/api/hosting/v1/accounts/{username}/wordpress/{software}/jwt-token", "inputSchema": { "type": "object", "properties": { "username": { "type": "string", "description": "username parameter" }, "software": { "type": "string", "description": "WordPress installation (software) identifier" } }, "required": [ "username", "software" ] }, "security": [ { "apiToken": [] } ], "group": "wordpress" }, { "name": "wordpress_installations_show-core-version", "title": "Show WordPress core version", "annotations": { "title": "Show WordPress core version", "readOnlyHint": true, "destructiveHint": false }, "description": "Show the WordPress core version for the specified installation, along with\nknown vulnerabilities affecting it.\n\nProvide the WordPress installation (software) identifier in the path. It can\nbe obtained from GET /api/hosting/v1/wordpress/installations (the `id` field).", "method": "GET", "path": "/api/hosting/v1/accounts/{username}/wordpress/{software}/version", "inputSchema": { "type": "object", "properties": { "username": { "type": "string", "description": "username parameter" }, "software": { "type": "string", "description": "WordPress installation (software) identifier" } }, "required": [ "username", "software" ] }, "security": [ { "apiToken": [] } ], "group": "wordpress" }, { "name": "wordpress_installations_update-core", "title": "Update WordPress core", "annotations": { "title": "Update WordPress core", "readOnlyHint": false, "destructiveHint": false }, "description": "Update the WordPress core for the specified installation (minor update or a\nspecific version).\n\nProvide the WordPress installation (software) identifier in the path. It can\nbe obtained from GET /api/hosting/v1/wordpress/installations (the `id` field).\n\nThis operation is asynchronous: a successful response only means the update\njob has been queued.", "method": "POST", "path": "/api/hosting/v1/accounts/{username}/wordpress/{software}/update", "inputSchema": { "type": "object", "properties": { "username": { "type": "string", "description": "username parameter" }, "software": { "type": "string", "description": "WordPress installation (software) identifier" }, "minor": { "type": "boolean", "description": "Update the minor version only." }, "version": { "type": "string", "description": "Update to a specific WordPress core version." } }, "required": [ "username", "software" ] }, "security": [ { "apiToken": [] } ], "group": "wordpress" }, { "name": "wordpress_litespeed-cache_purge-lite-speed", "title": "Purge LiteSpeed Cache", "annotations": { "title": "Purge LiteSpeed Cache", "readOnlyHint": false, "destructiveHint": true }, "description": "Purge the LiteSpeed Cache for the specified WordPress installation.\n\nProvide the WordPress installation (software) identifier in the path. It can\nbe obtained from GET /api/hosting/v1/wordpress/installations (the `id` field).", "method": "POST", "path": "/api/hosting/v1/accounts/{username}/wordpress/{software}/litespeed-cache/purge", "inputSchema": { "type": "object", "properties": { "username": { "type": "string", "description": "username parameter" }, "software": { "type": "string", "description": "WordPress installation (software) identifier" } }, "required": [ "username", "software" ] }, "security": [ { "apiToken": [] } ], "group": "wordpress" }, { "name": "wordpress_litespeed-cache_show-lite-speed-status", "title": "Show LiteSpeed Cache status", "annotations": { "title": "Show LiteSpeed Cache status", "readOnlyHint": true, "destructiveHint": false }, "description": "Show the LiteSpeed Cache status for the specified WordPress installation.\n\nProvide the WordPress installation (software) identifier in the path. It can\nbe obtained from GET /api/hosting/v1/wordpress/installations (the `id` field).", "method": "GET", "path": "/api/hosting/v1/accounts/{username}/wordpress/{software}/litespeed-cache/status", "inputSchema": { "type": "object", "properties": { "username": { "type": "string", "description": "username parameter" }, "software": { "type": "string", "description": "WordPress installation (software) identifier" } }, "required": [ "username", "software" ] }, "security": [ { "apiToken": [] } ], "group": "wordpress" }, { "name": "wordpress_login_create-links", "title": "Create login links", "annotations": { "title": "Create login links", "readOnlyHint": false, "destructiveHint": false }, "description": "Create temporary auto-login links for the specified WordPress installation.\n\nProvide the WordPress installation (software) identifier in the path. It can\nbe obtained from GET /api/hosting/v1/wordpress/installations (the `id` field).", "method": "POST", "path": "/api/hosting/v1/accounts/{username}/wordpress/{software}/login/links", "inputSchema": { "type": "object", "properties": { "username": { "type": "string", "description": "username parameter" }, "software": { "type": "string", "description": "WordPress installation (software) identifier" } }, "required": [ "username", "software" ] }, "security": [ { "apiToken": [] } ], "group": "wordpress" }, { "name": "wordpress_maintenance_show-status", "title": "Show maintenance status", "annotations": { "title": "Show maintenance status", "readOnlyHint": true, "destructiveHint": false }, "description": "Show the maintenance mode status for the specified WordPress installation.\n\nProvide the WordPress installation (software) identifier in the path. It can\nbe obtained from GET /api/hosting/v1/wordpress/installations (the `id` field).", "method": "GET", "path": "/api/hosting/v1/accounts/{username}/wordpress/{software}/maintenance/status", "inputSchema": { "type": "object", "properties": { "username": { "type": "string", "description": "username parameter" }, "software": { "type": "string", "description": "WordPress installation (software) identifier" } }, "required": [ "username", "software" ] }, "security": [ { "apiToken": [] } ], "group": "wordpress" }, { "name": "wordpress_maintenance_toggle", "title": "Toggle maintenance mode", "annotations": { "title": "Toggle maintenance mode", "readOnlyHint": false, "destructiveHint": true, "idempotentHint": true }, "description": "Enable or disable maintenance mode for the specified WordPress installation,\nbased on the `enabled` flag.\n\nProvide the WordPress installation (software) identifier in the path. It can\nbe obtained from GET /api/hosting/v1/wordpress/installations (the `id` field).", "method": "PATCH", "path": "/api/hosting/v1/accounts/{username}/wordpress/{software}/maintenance/toggle", "inputSchema": { "type": "object", "properties": { "username": { "type": "string", "description": "username parameter" }, "software": { "type": "string", "description": "WordPress installation (software) identifier" }, "enabled": { "type": "boolean", "description": "Enable (true) or disable (false) maintenance mode for the WordPress installation." } }, "required": [ "username", "software", "enabled" ] }, "security": [ { "apiToken": [] } ], "group": "wordpress" }, { "name": "wordpress_object-cache_show-memcached-status", "title": "Show Memcached object cache status", "annotations": { "title": "Show Memcached object cache status", "readOnlyHint": true, "destructiveHint": false }, "description": "Show the Memcached object cache status for the specified WordPress\ninstallation.\n\nProvide the WordPress installation (software) identifier in the path. It can\nbe obtained from GET /api/hosting/v1/wordpress/installations (the `id` field).", "method": "GET", "path": "/api/hosting/v1/accounts/{username}/wordpress/{software}/memcached/status", "inputSchema": { "type": "object", "properties": { "username": { "type": "string", "description": "username parameter" }, "software": { "type": "string", "description": "WordPress installation (software) identifier" } }, "required": [ "username", "software" ] }, "security": [ { "apiToken": [] } ], "group": "wordpress" }, { "name": "wordpress_object-cache_toggle-memcached", "title": "Toggle Memcached object cache", "annotations": { "title": "Toggle Memcached object cache", "readOnlyHint": false, "destructiveHint": true, "idempotentHint": true }, "description": "Activate or deactivate the Memcached object cache for the specified WordPress\ninstallation, based on the `enabled` flag.\n\nProvide the WordPress installation (software) identifier in the path. It can\nbe obtained from GET /api/hosting/v1/wordpress/installations (the `id` field).", "method": "PATCH", "path": "/api/hosting/v1/accounts/{username}/wordpress/{software}/memcached/toggle", "inputSchema": { "type": "object", "properties": { "username": { "type": "string", "description": "username parameter" }, "software": { "type": "string", "description": "WordPress installation (software) identifier" }, "enabled": { "type": "boolean", "description": "Activate (true) or deactivate (false) the Memcached object cache for the WordPress installation." } }, "required": [ "username", "software", "enabled" ] }, "security": [ { "apiToken": [] } ], "group": "wordpress" }, { "name": "wordpress_plugins_activate", "title": "Activate WordPress plugin", "annotations": { "title": "Activate WordPress plugin", "readOnlyHint": false, "destructiveHint": false }, "description": "Activate an installed plugin on a WordPress installation.\n\nProvide the WordPress installation (software) identifier in the path. It can\nbe obtained from GET /api/hosting/v1/wordpress/installations (the `id` field).\n\nThis operation is asynchronous: a successful response only means the activation\njob has been queued.", "method": "POST", "path": "/api/hosting/v1/accounts/{username}/wordpress/{software}/plugins/activate", "inputSchema": { "type": "object", "properties": { "username": { "type": "string", "description": "username parameter" }, "software": { "type": "string", "description": "WordPress installation (software) identifier" }, "plugin": { "type": "string", "description": "Slug of the installed plugin to activate." } }, "required": [ "username", "software", "plugin" ] }, "security": [ { "apiToken": [] } ], "group": "wordpress" }, { "name": "wordpress_plugins_deactivate", "title": "Deactivate WordPress plugin", "annotations": { "title": "Deactivate WordPress plugin", "readOnlyHint": false, "destructiveHint": false }, "description": "Deactivate an installed plugin on a WordPress installation.\n\nProvide the WordPress installation (software) identifier in the path. It can\nbe obtained from GET /api/hosting/v1/wordpress/installations (the `id` field).\n\nThis operation is asynchronous: a successful response only means the\ndeactivation job has been queued.", "method": "POST", "path": "/api/hosting/v1/accounts/{username}/wordpress/{software}/plugins/deactivate", "inputSchema": { "type": "object", "properties": { "username": { "type": "string", "description": "username parameter" }, "software": { "type": "string", "description": "WordPress installation (software) identifier" }, "plugin": { "type": "string", "description": "Slug of the installed plugin to deactivate." } }, "required": [ "username", "software", "plugin" ] }, "security": [ { "apiToken": [] } ], "group": "wordpress" }, { "name": "wordpress_plugins_deploy", "title": "Deploy WordPress plugin", "annotations": { "title": "Deploy WordPress plugin", "readOnlyHint": false, "destructiveHint": true }, "description": "Deploy a WordPress plugin from an already uploaded directory.\n\nThis endpoint allows you to deploy a WordPress plugin that has been uploaded to the website's directory.\nThe plugin will be activated and made available in the WordPress admin panel.", "method": "POST", "path": "/api/hosting/v1/accounts/{username}/websites/{domain}/wordpress/plugins/deploy", "inputSchema": { "type": "object", "properties": { "username": { "type": "string", "description": "username parameter" }, "domain": { "type": "string", "description": "Domain name" }, "slug": { "type": "string", "description": "Slug of the plugin" }, "plugin_path": { "type": "string", "description": "Relative path to the plugin directory from wp-content/plugins" } }, "required": [ "username", "domain", "slug", "plugin_path" ] }, "security": [ { "apiToken": [] } ], "group": "wordpress", "hidden": true }, { "name": "wordpress_plugins_install", "title": "Install WordPress plugins", "annotations": { "title": "Install WordPress plugins", "readOnlyHint": false, "destructiveHint": false }, "description": "Install one or more plugins on an existing WordPress installation.\n\nProvide the WordPress installation (software) identifier in the path. It can\nbe obtained from GET /api/hosting/v1/wordpress/installations (the `id`\nfield). Use GET /api/hosting/v1/wordpress/plugins to discover the plugin\nslugs available for installation.\n\nThis operation is asynchronous: a successful response only means the install\njob has been queued, not that the plugins are ready.", "method": "POST", "path": "/api/hosting/v1/accounts/{username}/wordpress/{software}/plugins/install", "inputSchema": { "type": "object", "properties": { "username": { "type": "string", "description": "username parameter" }, "software": { "type": "string", "description": "WordPress installation (software) identifier" }, "plugins": { "type": "array", "description": "Plugin slugs to install. Use GET /api/hosting/v1/wordpress/plugins to discover available slugs.", "items": { "type": "string", "description": "Plugin slug" } } }, "required": [ "username", "software", "plugins" ] }, "security": [ { "apiToken": [] } ], "group": "wordpress" }, { "name": "wordpress_plugins_list", "title": "List available WordPress plugins", "annotations": { "title": "List available WordPress plugins", "readOnlyHint": true, "destructiveHint": false }, "description": "List plugins recommended for installation on a WordPress installation that are\nnot yet installed.\n\nProvide the WordPress installation (software) identifier in the path. It can\nbe obtained from GET /api/hosting/v1/wordpress/installations (the `id` field).", "method": "GET", "path": "/api/hosting/v1/accounts/{username}/wordpress/{software}/plugins/available", "inputSchema": { "type": "object", "properties": { "username": { "type": "string", "description": "username parameter" }, "software": { "type": "string", "description": "WordPress installation (software) identifier" } }, "required": [ "username", "software" ] }, "security": [ { "apiToken": [] } ], "group": "wordpress" }, { "name": "wordpress_plugins_list-installed", "title": "List installed WordPress plugins", "annotations": { "title": "List installed WordPress plugins", "readOnlyHint": true, "destructiveHint": false }, "description": "List plugins installed on a WordPress installation, including their status,\navailable updates and known vulnerabilities.\n\nProvide the WordPress installation (software) identifier in the path. It can\nbe obtained from GET /api/hosting/v1/wordpress/installations (the `id` field).", "method": "GET", "path": "/api/hosting/v1/accounts/{username}/wordpress/{software}/plugins", "inputSchema": { "type": "object", "properties": { "username": { "type": "string", "description": "username parameter" }, "software": { "type": "string", "description": "WordPress installation (software) identifier" }, "category": { "type": "string", "description": "Filter installed plugins by category.", "enum": [ "cache" ] } }, "required": [ "username", "software" ] }, "security": [ { "apiToken": [] } ], "group": "wordpress" }, { "name": "wordpress_plugins_search", "title": "Search WordPress plugins", "annotations": { "title": "Search WordPress plugins", "readOnlyHint": true, "destructiveHint": false }, "description": "Search the WordPress.org plugin directory for plugins available to install.\n\nUse the returned `slug` values with\nPOST /api/hosting/v1/accounts/{username}/wordpress/{software}/plugins/install.", "method": "GET", "path": "/api/hosting/v1/wordpress/plugins", "inputSchema": { "type": "object", "properties": { "search": { "type": "string", "description": "Search term to match against plugin names. Minimum 3 characters." } }, "required": [ "search" ] }, "security": [ { "apiToken": [] } ], "group": "wordpress" }, { "name": "wordpress_plugins_list-suggested", "title": "List suggested WordPress plugins", "annotations": { "title": "List suggested WordPress plugins", "readOnlyHint": true, "destructiveHint": false }, "description": "List curated plugin suggestions grouped by website type.\n\nUse the returned `slug` values with\nPOST /api/hosting/v1/accounts/{username}/wordpress/{software}/plugins/install.", "method": "GET", "path": "/api/hosting/v1/wordpress/plugins/suggested", "inputSchema": { "type": "object", "properties": { "order_id": { "type": "integer", "description": "Optionally scope suggestions to a specific order." } }, "required": [] }, "security": [ { "apiToken": [] } ], "group": "wordpress" }, { "name": "wordpress_plugins_check-if-woo-commerce-is-installed", "title": "Check if WooCommerce is installed", "annotations": { "title": "Check if WooCommerce is installed", "readOnlyHint": true, "destructiveHint": false }, "description": "Check whether WooCommerce is installed on any WordPress installation of a\ndomain. Optionally filter by domain to scope the check.", "method": "GET", "path": "/api/hosting/v1/wordpress/plugins/is-woocommerce-installed", "inputSchema": { "type": "object", "properties": { "domain": { "type": "string", "description": "Filter by domain name (case-insensitive substring match)" } }, "required": [] }, "security": [ { "apiToken": [] } ], "group": "wordpress" }, { "name": "wordpress_plugins_uninstall", "title": "Uninstall WordPress plugins", "annotations": { "title": "Uninstall WordPress plugins", "readOnlyHint": false, "destructiveHint": true }, "description": "Uninstall one or more plugins from a WordPress installation.\n\nProvide the WordPress installation (software) identifier in the path. It can\nbe obtained from GET /api/hosting/v1/wordpress/installations (the `id` field).\n\nThis operation is asynchronous: a successful response only means the uninstall\njob has been queued.", "method": "POST", "path": "/api/hosting/v1/accounts/{username}/wordpress/{software}/plugins/uninstall", "inputSchema": { "type": "object", "properties": { "username": { "type": "string", "description": "username parameter" }, "software": { "type": "string", "description": "WordPress installation (software) identifier" }, "plugins": { "type": "array", "description": "Slugs of the installed plugins to uninstall.", "items": { "type": "string", "description": "Plugin slug" } } }, "required": [ "username", "software", "plugins" ] }, "security": [ { "apiToken": [] } ], "group": "wordpress" }, { "name": "wordpress_plugins_update-hostinger", "title": "Update Hostinger WordPress plugin", "annotations": { "title": "Update Hostinger WordPress plugin", "readOnlyHint": false, "destructiveHint": false }, "description": "Update a Hostinger plugin to its latest version on a WordPress installation.\n\nProvide the WordPress installation (software) identifier in the path. It can\nbe obtained from GET /api/hosting/v1/wordpress/installations (the `id` field).\n\nThis operation is asynchronous: a successful response only means the update job\nhas been queued.", "method": "POST", "path": "/api/hosting/v1/accounts/{username}/wordpress/{software}/plugins/hostinger/update", "inputSchema": { "type": "object", "properties": { "username": { "type": "string", "description": "username parameter" }, "software": { "type": "string", "description": "WordPress installation (software) identifier" }, "slug": { "type": "string", "description": "Slug of the Hostinger plugin to update to its latest version.", "enum": [ "hostinger", "hostinger-ai-assistant", "hostinger-affiliate-plugin", "hostinger-easy-onboarding", "hostinger-reach" ] } }, "required": [ "username", "software", "slug" ] }, "security": [ { "apiToken": [] } ], "group": "wordpress" }, { "name": "wordpress_plugins_update", "title": "Update WordPress plugins", "annotations": { "title": "Update WordPress plugins", "readOnlyHint": false, "destructiveHint": false }, "description": "Update one or more installed plugins to their latest version on a WordPress\ninstallation.\n\nProvide the WordPress installation (software) identifier in the path. It can\nbe obtained from GET /api/hosting/v1/wordpress/installations (the `id` field).\n\nThis operation is asynchronous: a successful response only means the update job\nhas been queued.", "method": "POST", "path": "/api/hosting/v1/accounts/{username}/wordpress/{software}/plugins/update", "inputSchema": { "type": "object", "properties": { "username": { "type": "string", "description": "username parameter" }, "software": { "type": "string", "description": "WordPress installation (software) identifier" }, "plugins": { "type": "array", "description": "Slugs of the installed plugins to update to their latest version.", "items": { "type": "string", "description": "Plugin slug" } } }, "required": [ "username", "software", "plugins" ] }, "security": [ { "apiToken": [] } ], "group": "wordpress" }, { "name": "wordpress_themes_activate", "title": "Activate WordPress theme", "annotations": { "title": "Activate WordPress theme", "readOnlyHint": false, "destructiveHint": false }, "description": "Activate an installed theme on a WordPress installation.\n\nProvide the WordPress installation (software) identifier in the path. It can\nbe obtained from GET /api/hosting/v1/wordpress/installations (the `id` field).\n\nThis operation is asynchronous: a successful response only means the activation\njob has been queued.", "method": "POST", "path": "/api/hosting/v1/accounts/{username}/wordpress/{software}/themes/activate", "inputSchema": { "type": "object", "properties": { "username": { "type": "string", "description": "username parameter" }, "software": { "type": "string", "description": "WordPress installation (software) identifier" }, "theme": { "type": "string", "description": "Slug of the installed theme to activate." } }, "required": [ "username", "software", "theme" ] }, "security": [ { "apiToken": [] } ], "group": "wordpress" }, { "name": "wordpress_themes_deploy", "title": "Deploy WordPress theme", "annotations": { "title": "Deploy WordPress theme", "readOnlyHint": false, "destructiveHint": true }, "description": "Deploy a WordPress theme from an already uploaded directory.\n\nThis endpoint allows you to deploy a WordPress theme that has been uploaded to the website's directory.\nThe theme can be optionally activated after deployment.", "method": "POST", "path": "/api/hosting/v1/accounts/{username}/websites/{domain}/wordpress/themes/deploy", "inputSchema": { "type": "object", "properties": { "username": { "type": "string", "description": "username parameter" }, "domain": { "type": "string", "description": "Domain name" }, "slug": { "type": "string", "description": "Slug of the theme" }, "theme_path": { "type": "string", "description": "Relative path to the theme directory from wp-content/themes" }, "is_activated": { "type": "boolean", "description": "Whether to activate the theme after deployment" } }, "required": [ "username", "domain", "slug", "theme_path" ] }, "security": [ { "apiToken": [] } ], "group": "wordpress", "hidden": true }, { "name": "wordpress_themes_install", "title": "Install WordPress theme", "annotations": { "title": "Install WordPress theme", "readOnlyHint": false, "destructiveHint": false }, "description": "Install a theme on an existing WordPress installation.\n\nProvide the WordPress installation (software) identifier in the path. It can\nbe obtained from GET /api/hosting/v1/wordpress/installations (the `id`\nfield).\n\nWhen the theme is one of the Hostinger themes (hostinger-blog,\nhostinger-affiliate-theme, hostinger-ai-theme), the optional `palette`,\n`layout`, and `font` fields are forwarded to the custom installer (defaults:\npalette1, layout1, default). For any other theme they are ignored.\n\nThis operation is asynchronous: a successful response only means the install\njob has been queued, not that the theme is ready.", "method": "POST", "path": "/api/hosting/v1/accounts/{username}/wordpress/{software}/themes/install", "inputSchema": { "type": "object", "properties": { "username": { "type": "string", "description": "username parameter" }, "software": { "type": "string", "description": "WordPress installation (software) identifier" }, "theme": { "type": "string", "description": "Slug of the theme to install. Hostinger theme slugs (hostinger-blog, hostinger-affiliate-theme, hostinger-ai-theme) trigger the custom installer and forward the optional palette/layout/font fields; any other WordPress theme slug uses the standard installer and ignores those fields." }, "palette": { "type": "string", "description": "Palette identifier. Only applied when the theme is a Hostinger theme; the default is used when omitted." }, "layout": { "type": "string", "description": "Layout identifier. Only applied when the theme is a Hostinger theme; the default is used when omitted." }, "font": { "type": "string", "description": "Font identifier. Only applied when the theme is a Hostinger theme; the default is used when omitted.", "enum": [ "professional", "modern", "elegant", "creative", "dynamic", "default" ] } }, "required": [ "username", "software", "theme" ] }, "security": [ { "apiToken": [] } ], "group": "wordpress" }, { "name": "wordpress_themes_list-installed", "title": "List installed WordPress themes", "annotations": { "title": "List installed WordPress themes", "readOnlyHint": true, "destructiveHint": false }, "description": "List themes installed on a WordPress installation, including their status,\navailable updates and known vulnerabilities.\n\nProvide the WordPress installation (software) identifier in the path. It can\nbe obtained from GET /api/hosting/v1/wordpress/installations (the `id` field).", "method": "GET", "path": "/api/hosting/v1/accounts/{username}/wordpress/{software}/themes", "inputSchema": { "type": "object", "properties": { "username": { "type": "string", "description": "username parameter" }, "software": { "type": "string", "description": "WordPress installation (software) identifier" } }, "required": [ "username", "software" ] }, "security": [ { "apiToken": [] } ], "group": "wordpress" }, { "name": "wordpress_themes_list", "title": "List WordPress themes", "annotations": { "title": "List WordPress themes", "readOnlyHint": true, "destructiveHint": false }, "description": "List WordPress themes available to install.\n\nUse the returned `slug` values with\nPOST /api/hosting/v1/accounts/{username}/wordpress/{software}/themes/install.", "method": "GET", "path": "/api/hosting/v1/wordpress/themes", "inputSchema": { "type": "object", "properties": { "order_id": { "type": "integer", "description": "Optionally scope themes to a specific order." }, "search": { "type": "string", "description": "Search term to match against theme names." } }, "required": [] }, "security": [ { "apiToken": [] } ], "group": "wordpress" }, { "name": "wordpress_themes_uninstall", "title": "Uninstall WordPress themes", "annotations": { "title": "Uninstall WordPress themes", "readOnlyHint": false, "destructiveHint": true }, "description": "Uninstall one or more themes from a WordPress installation.\n\nProvide the WordPress installation (software) identifier in the path. It can\nbe obtained from GET /api/hosting/v1/wordpress/installations (the `id` field).\n\nThis operation is asynchronous: a successful response only means the uninstall\njob has been queued.", "method": "POST", "path": "/api/hosting/v1/accounts/{username}/wordpress/{software}/themes/uninstall", "inputSchema": { "type": "object", "properties": { "username": { "type": "string", "description": "username parameter" }, "software": { "type": "string", "description": "WordPress installation (software) identifier" }, "themes": { "type": "array", "description": "Slugs of the installed themes to uninstall.", "items": { "type": "string", "description": "Theme slug" } } }, "required": [ "username", "software", "themes" ] }, "security": [ { "apiToken": [] } ], "group": "wordpress" }, { "name": "wordpress_themes_update", "title": "Update WordPress themes", "annotations": { "title": "Update WordPress themes", "readOnlyHint": false, "destructiveHint": false }, "description": "Update one or more installed themes to their latest version on a WordPress\ninstallation.\n\nProvide the WordPress installation (software) identifier in the path. It can\nbe obtained from GET /api/hosting/v1/wordpress/installations (the `id` field).\n\nThis operation is asynchronous: a successful response only means the update job\nhas been queued.", "method": "POST", "path": "/api/hosting/v1/accounts/{username}/wordpress/{software}/themes/update", "inputSchema": { "type": "object", "properties": { "username": { "type": "string", "description": "username parameter" }, "software": { "type": "string", "description": "WordPress installation (software) identifier" }, "themes": { "type": "array", "description": "Slugs of the installed themes to update to their latest version.", "items": { "type": "string", "description": "Theme slug" } } }, "required": [ "username", "software", "themes" ] }, "security": [ { "apiToken": [] } ], "group": "wordpress" } ]; export default tools;