Sequential Thinking
Dynamic and reflective problem-solving through thought sequences
MOmodelcontextprotocol/servers91k近 7 天新增 182 个 star
MCP server for Hostinger API
Model Context Protocol (MCP) server for Hostinger API.
If you don't want to install or run anything locally, connect directly to Hostinger's hosted MCP server:
https://mcp.hostinger.com
claude mcp add --transport http hostinger https://mcp.hostinger.com
This opens a browser window to authorize via OAuth. Once approved, the operations below are reachable through execute in your session.
Add https://mcp.hostinger.com as a remote Streamable HTTP MCP server in your client's configuration and complete the OAuth prompt when it appears. Refer to your client's docs for how it exposes "add remote MCP server" / "custom connector" settings.
If you don't have Node.js installed, you can download it from the official website. Alternatively, you can use a package manager like Homebrew (for macOS) or Chocolatey (for Windows) to install Node.js.
We recommend using NVM (Node Version Manager) to install and manage installed Node.js versions. After installing NVM, you can install Node.js with the following command:
nvm install v24
nvm use v24
To install the MCP server, run one of the following command, depending on your package manager:
# Install globally from npm
npm install -g @hostinger/mcp
# Or with yarn
yarn global add @hostinger/mcp
# Or with pnpm
pnpm add -g @hostinger/mcp
To update the MCP server to the latest version, use one of the following commands, depending on your package manager:
# Update globally from npm
npm update -g @hostinger/mcp
# Or with yarn
yarn global upgrade @hostinger/mcp
# Or with pnpm
pnpm update -g @hostinger/mcp
This package installs the following MCP server commands:
hostinger-api-mcp — unified server over every operation (411 total)hostinger-agency-hosting-mcp — 42 operations for agency-hostinghostinger-billing-mcp — 9 operations for billinghostinger-dns-mcp — 8 operations for dnshostinger-domains-mcp — 42 operations for domainshostinger-ecommerce-mcp — 29 operations for ecommercehostinger-horizons-mcp — 6 operations for horizonshostinger-hosting-mcp — 80 operations for hostinghostinger-mail-mcp — 38 operations for mailhostinger-reach-mcp — 52 operations for reachhostinger-vps-mcp — 67 operations for vpshostinger-wordpress-mcp — 38 operations for wordpressEvery binary exposes the same three tools; a scoped binary only searches and executes its own group's operations. hostinger-api-mcp remains the backwards-compatible default.
The following environment variables can be configured when running the server:
DEBUG: Enable debug logging (true/false) (default: false)HOSTINGER_API_TOKEN: Your API token, which will be sent in the Authorization header. When set, OAuth is bypassed entirely.API_TOKEN: Deprecated alias for HOSTINGER_API_TOKEN. Will be removed in a future version — prefer HOSTINGER_API_TOKEN.OAUTH_ISSUER: OAuth server base URL (default: https://auth.hostinger.com). Only used when HOSTINGER_API_TOKEN is not set.The server supports two authentication methods:
Set HOSTINGER_API_TOKEN in the environment or .env file. When present it always takes precedence — no OAuth code runs.
When HOSTINGER_API_TOKEN is not set and the server runs in stdio mode, OAuth 2.0 with PKCE is used automatically on the first authenticated tool call:
Credentials are stored at:
~/.config/hostinger-mcp/credentials.json (mode 0600)%APPDATA%\hostinger-mcp\credentials.jsonCredentials are shared across all Hostinger MCP binaries (hostinger-api-mcp, hostinger-vps-mcp, etc.).
Manual commands:
# Run the OAuth sign-in flow immediately (don't wait for the first tool call)
hostinger-api-mcp --login
# Revoke stored credentials
hostinger-api-mcp --logout
HTTP transport note: OAuth sign-in is not supported in --http mode. Set HOSTINGER_API_TOKEN before using --http.
{
"mcpServers": {
"hostinger-api": {
"command": "hostinger-api-mcp",
"env": {
"DEBUG": "false",
"HOSTINGER_API_TOKEN": "YOUR API TOKEN"
}
}
}
}
The MCP server supports two transport modes:
The server can use standard input / output (stdio) transport (default). This provides local streaming:
The server can use HTTP streaming transport. This provides bidirectional streaming over HTTP:
# Default HTTP transport on localhost:8100
hostinger-api-mcp --http
# Specify custom host and port
hostinger-api-mcp --http --host 0.0.0.0 --port 8150
Options:
--http Use HTTP streaming transport (requires HOSTINGER_API_TOKEN env var)
--stdio Use Server-Sent Events transport (default)
--host {host} Hostname or IP address to listen on (default: 127.0.0.1)
--port {port} Port to bind to (default: 8100)
--login Run OAuth sign-in flow and exit
--logout Revoke stored OAuth credentials and exit
--help Show help message
This server implements the Model Context Protocol (MCP) and can be used with any MCP-compatible consumer.
Example of connecting to this server using HTTP streaming transport:
import { Client } from "@modelcontextprotocol/sdk/client/index.js";
import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js";
// Create HTTP transport
const transport = new StreamableHTTPClientTransport({
url: "http://localhost:8100/",
headers: {
"Authorization": `Bearer ${process.env.HOSTINGER_API_TOKEN}`
}
});
// Connect to the MCP server
const client = new Client({
name: "my-client",
version: "1.0.0"
}, {
capabilities: {}
});
await client.connect(transport);
// List available tools
const { tools } = await client.listTools();
console.log("Available tools:", tools);
// Execute an operation
const result = await client.callTool({
name: "execute",
arguments: { operation: "billing_catalog_list", params: { category: "DOMAIN" } }
});
console.log("Tool result:", result);
Every server exposes three tools:
search — find operations by keyword; returns each match with its inputSchema.execute — run one operation: { "operation": "<name>", "params": { ... } }.multi-execute — run up to 20 operations in order, stopping at the first failure. A params value that is exactly "$steps.<i>.<path>" is replaced by that value from an earlier step's result.The operations reachable through execute, by binary:
hostinger-agency-hosting-mcpDeploy 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.
customcustomDeploy 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.
customcustomLists the datacenters available for provisioning a new website on the given Agency Plan hosting order.
Each datacenter includes a pinger_url you can ping from the client to measure round-trip
latency; comparing the results across datacenters lets you pick the nearest one (lowest
ping) before choosing its code as the datacenter_code when creating a website setup.
GET/api/agency-hosting/v1/orders/{order_id}/datacentersChanges the primary domain for an Agency Plan website.
Provide the current domain in the path and the new domain in the request body. Set domain to null to revert to the temporary domain.
PUT/api/agency-hosting/v1/websites/{website_uid}/domains/{from_domain}Links a domain to the specified Agency Plan website so it can serve traffic for that domain.
POST/api/agency-hosting/v1/websites/{website_uid}/domainsReturns a paginated list of domains associated with Agency Plan websites accessible to the authenticated client.
Use the website_uuids filter to narrow results to specific websites.
GET/api/agency-hosting/v1/domainsUnlinks a domain from the specified Agency Plan website.
The website stops serving traffic on this domain immediately.
Website files and database are preserved, and any other linked domains remain accessible.
If this is the only domain on the website, unlinking leaves the website without an accessible domain.
DELETE/api/agency-hosting/v1/websites/{website_uid}/domains/{domain}Generate a file browser upload URL with authentication credentials for uploading files to an Agency Plan website's file storage.
Returns url, auth_key and rest_auth_key. Use these to upload a file to the
website's file storage via the TUS resumable upload protocol (TUS 1.0.0). Send
X-Auth: {auth_key} and X-Auth-Rest: {rest_auth_key} headers on every request below.
POST to {url}/{relative_file_path}?override=true with headers
upload-length: {file size in bytes} and upload-offset: 0. Expect 201 Created.PATCH requests with an upload-offset header tracking progress) until complete.relative_file_path is the destination path inside the website's file storage, e.g.
app.zip.
Instead of a TUS client, plain curl also works:
FILE=app.zip
SIZE=$(stat -f%z "$FILE") # stat -c%s on Linux
curl -i -X POST "{url}/${FILE}?override=true" \
-H "X-Auth: {auth_key}" \
-H "X-Auth-Rest: {rest_auth_key}" \
-H "Tus-Resumable: 1.0.0" \
-H "Upload-Length: ${SIZE}" \
-H "Upload-Offset: 0"
# -> 201 Created
curl -i -X PATCH "{url}/${FILE}?override=true" \
-H "X-Auth: {auth_key}" \
-H "X-Auth-Rest: {rest_auth_key}" \
-H "Tus-Resumable: 1.0.0" \
-H "Content-Type: application/offset+octet-stream" \
-H "Upload-Offset: 0" \
--data-binary "@${FILE}"
# -> 204 No Content, Upload-Offset response header equals SIZE when done
POST/api/agency-hosting/v1/websites/{website_uid}/files/upload-urlsImports an Agency Plan website from an already-uploaded archive.
Upload the archive to the website's root directory via file browser first, then provide its filename in this request. Website contents are overwritten by the archive contents. Supported archive types: .zip, .tar, .tar.gz, .tgz.
POST/api/agency-hosting/v1/websites/{website_uid}/files/import-archiveReturns aggregated disk and inode usage for the Agency Plan order over the selected time frame, plus the plan quotas. Figures cover the whole order account. Values may be up to one hour stale. CPU, memory, and process usage are on the resource-usage-metrics endpoint.
GET/api/agency-hosting/v1/orders/{order_id}/disk-usage-metricsReturns a paginated list of Agency Plan orders accessible to the authenticated client.
GET/api/agency-hosting/v1/ordersReturns aggregated CPU, memory, and process usage for the Agency Plan order over the selected time frame, plus the plan quotas and a per-website breakdown. Each website is identified by uid. Suspended and deleted websites are excluded from both the order totals and the per-website breakdown. Values may be up to one hour stale. Disk and inode usage are on the disk-usage-metrics endpoint.
GET/api/agency-hosting/v1/orders/{order_id}/resource-usage-metricsLists every PHP extension available to an Agency Plan website and whether it is currently enabled.
GET/api/agency-hosting/v1/websites/{website_uid}/php-settings/extensionsReplaces 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.
PUT/api/agency-hosting/v1/websites/{website_uid}/php-settings/extensionsLists 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.
GET/api/agency-hosting/v1/websites/{website_uid}/php-settings/optionsReplaces 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.
PUT/api/agency-hosting/v1/websites/{website_uid}/php-settings/optionsLists 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.
GET/api/agency-hosting/v1/orders/{order_id}/websites/php-settings/versionsLists 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.
GET/api/agency-hosting/v1/websites/{website_uid}/php-settings/versionsSwitches 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.
PATCH/api/agency-hosting/v1/websites/{website_uid}/php-settings/versionProvisions a new website on one of your Agency Plan hosting orders.
Choose the datacenter, stack (flavor), and PHP version for the site. Optionally attach
your own domain — omit it, set it to null, or leave it unavailable and a free
*.hostingersite.com subdomain is generated instead — and/or install WordPress by
supplying the wordpress details (admin account, site title, and language).
Common setups:
flavor set to php-fpm, with settings.php.version; omit
wordpress and type.flavor set to the desired WordPress version (e.g. wp-7.0), plus
the wordpress block (admin account, title, language).flavor set to php-fpm and type set to
node-static.Provisioning runs in the background, so the response returns immediately with a setup UUID that identifies the job. The new website becomes reachable once provisioning finishes.
POST/api/agency-hosting/v1/orders/{order_id}/websites/setupsReturns the current status of an Agency Plan website setup started via the setups endpoint.
Poll this endpoint using the setup_uuid returned from the provisioning request until
status becomes completed, at which point website_uid identifies the new website.
GET/api/agency-hosting/v1/orders/{order_id}/websites/setups/{setup_uuid}Replaces the Let's Encrypt certificate of the domain: the current platform certificate, when
one is recorded, is revoked and removed, then a new setup starts in the background. Returns at
once; Get website SSL status reports installing while it runs, then active or failed.
Returns 422 for free subdomains, when a certificate process is recorded for the domain (a failed setup counts until it is cleaned up), or when the domain hit its limit of three setups per seven days. Returns 429 when the same domain was requested less than a minute ago, and 403 when the website is suspended or locked, and 404 when the website or the domain does not exist.
POST/api/agency-hosting/v1/websites/{website_uid}/domains/{domain}/ssl/reinstallStarts a Let's Encrypt certificate setup for the domain and returns at once; the setup runs in
the background. Get website SSL status reports installing while it runs, then active or
failed; the ssl_setup entry of List website processes shows the same progress.
Returns 422 when the domain already has a platform certificate that is not expired, when a certificate process is recorded for the domain (a failed setup counts until it is cleaned up), or when the domain hit its limit of three setups per seven days. Returns 429 when the same domain was requested less than a minute ago, 403 when the website is suspended or locked, and 404 when the website or the domain does not exist.
POST/api/agency-hosting/v1/websites/{website_uid}/domains/{domain}/ssl/setupReturns the SSL state of one domain of an Agency Plan website: the certificate status,
whether the certificate was uploaded by the customer, and when it stops being valid.
installing means a certificate setup is running or retrying; the ssl_setup entry of
List website processes shows the same progress. active means a valid certificate is in
place: uploaded by the customer, issued by the platform, or a lifetime certificate bought for
the domain. failed means the last setup gave up and no valid certificate is in place.
expired means the certificate has run out. not_installed means the domain has no
certificate and no setup process. Returns 404 when the website or the domain does not exist.
GET/api/agency-hosting/v1/websites/{website_uid}/domains/{domain}/ssl/statusRemoves the platform-issued Let's Encrypt certificate of the domain: the certificate is revoked and deleted before the response, so the domain is no longer served with a platform certificate until a new setup completes. Also succeeds when the domain has no platform certificate to remove. Uploaded (custom) certificates are not affected.
Returns 422 when a certificate process is recorded for the domain (a failed setup counts until it is cleaned up), 429 when the same domain was requested less than a minute ago, and 403 when the website is suspended or locked, and 404 when the website or the domain does not exist.
DELETE/api/agency-hosting/v1/websites/{website_uid}/domains/{domain}/sslBuilds and deploys a Node.js application for an Agency Plan website from an already-uploaded archive.
Upload the archive to file browser first, then provide its relative path from document root in this request. Website contents are overwritten by the build result, which is deployed to public_html.
POST/api/agency-hosting/v1/websites/{website_uid}/build-assetsClears cache for all domains associated with an Agency Plan website, including its preview domain.
This operation clears all cache types for the website.
DELETE/api/agency-hosting/v1/websites/{website_uid}/cacheReturns a paginated list of cron jobs configured for an Agency Plan website.
Each entry includes the schedule expression and the command executed on that schedule.
GET/api/agency-hosting/v1/websites/{website_uid}/cron-jobsCreates a cron job for an Agency Plan website from a schedule expression and a command.
Returns the created cron job, including its uuid, which is required to delete the cron job.
POST/api/agency-hosting/v1/websites/{website_uid}/cron-jobsPermanently deletes the cron job identified by its uuid from an Agency Plan website.
The operation is idempotent: deleting a cron job that does not exist succeeds without error.
DELETE/api/agency-hosting/v1/websites/{website_uid}/cron-jobs/{uuid}Returns a paginated list of MySQL databases created for an Agency Plan website.
Each entry includes the database's non-system users.
GET/api/agency-hosting/v1/websites/{website_uid}/databasesCreates a MySQL database with a dedicated user for an Agency Plan website.
The database name, username, and password must all be provided by the caller.
POST/api/agency-hosting/v1/websites/{website_uid}/databasesPermanently deletes a MySQL database and all its data from an Agency Plan website, including its users.
The operation is idempotent: deleting a database that does not exist succeeds without error.
DELETE/api/agency-hosting/v1/websites/{website_uid}/databases/{database_name}Creates a user for an existing database on an Agency Plan website.
Each database supports a single non-system user; creating a user for a database that already has one fails.
POST/api/agency-hosting/v1/websites/{website_uid}/databases/{database_name}/usersPermanently deletes a database user from an Agency Plan website database, revoking all access it had.
The operation is idempotent: deleting a user that does not exist succeeds without error.
DELETE/api/agency-hosting/v1/websites/{website_uid}/databases/{database_name}/users/{database_user_name}Retrieves detailed information about a specific Agency Plan website, including configuration, status, metadata, hosting plan details, and resource quotas.
GET/api/agency-hosting/v1/websites/{website_uid}Permanently deletes an Agency Plan website. Deletion is processed asynchronously: the website is immediately transitioned to a deleting state and the underlying server resources are removed in the background.
DELETE/api/agency-hosting/v1/websites/{website_uid}Retrieve a paginated list of Agency Plan websites (H5G, Builder, and Horizons) accessible to the authenticated client.
This endpoint returns websites from your hosting accounts as well as websites from other client hosting accounts that have shared access with you.
The response shape differs per platform — see the platform field on each item.
Use website_types to list only websites of a given detected type, e.g. only
WordPress websites (website_types=wordpress) or only Node.js websites
(website_types=nodejs). Combine with order_ids, states, or domain for more
targeted results.
GET/api/agency-hosting/v1/websitesLists active and recently completed asynchronous processes for an Agency Plan website.
Each process has a unique ID (for tracking), a type, and a status (running, completed, failed). Poll this endpoint after initiating async operations (SSL setup, backups, cloning) to track progress.
GET/api/agency-hosting/v1/websites/{website_uid}/processesChanges the installed WordPress core version on an Agency Plan website to one of the versions available for installation.
PATCH/api/agency-hosting/v1/websites/{website_uid}/wordpress/settings/versionReturns the current WordPress settings for an Agency Plan website: installed core version, LiteSpeed Cache plugin status, object cache status, and maintenance mode status.
GET/api/agency-hosting/v1/websites/{website_uid}/wordpress/settingsLists the WordPress core versions available for installation on an Agency Plan website.
GET/api/agency-hosting/v1/websites/{website_uid}/wordpress/settings/versionshostinger-billing-mcpRetrieve catalog items available for order.
Prices in catalog items is displayed as cents (without floating point),
e.g: float 17.99 is displayed as integer 1799.
Use this endpoint to view available services and pricing before placing orders.
GET/api/billing/v1/catalogCreate a purchase order for any Hostinger product.
This unified endpoint places an order for one or more catalog items and
works across all Hostinger products, leveraging the existing billing
infrastructure. Use the catalog endpoint to look
up the item_id values available for purchase.
If no payment method is provided, your default payment method will be used automatically.
If the response is 202 Accepted, the payment is still being processed and the order will
complete asynchronously once the payment is confirmed.
This endpoint only places the order. Product-specific provisioning (e.g. VPS setup or domain registration) is not performed here — once the order completes, use the relevant product endpoints or hPanel to finalize setup.
Use this endpoint to purchase any product available in the catalog.
POST/api/billing/v1/ordersSet the default payment method for your account.
Use this endpoint to configure the primary payment method for future orders.
POST/api/billing/v1/payment-methods/{paymentMethodId}Delete a payment method from your account.
Use this endpoint to remove unused payment methods from user accounts.
DELETE/api/billing/v1/payment-methods/{paymentMethodId}Retrieve available payment methods that can be used for placing new orders.
If you want to add new payment method, please use hPanel.
Use this endpoint to view available payment options before creating orders.
GET/api/billing/v1/payment-methodsRetrieve a list of all subscriptions associated with your account.
Use this endpoint to monitor active services and billing status.
GET/api/billing/v1/subscriptionsDisable auto-renewal for a subscription.
Use this endpoint when disable auto-renewal for a subscription.
DELETE/api/billing/v1/subscriptions/{subscriptionId}/auto-renewal/disableEnable auto-renewal for a subscription.
Use this endpoint when enable auto-renewal for a subscription.
PATCH/api/billing/v1/subscriptions/{subscriptionId}/auto-renewal/enableCreate a renewal order for an existing Hostinger subscription.
This endpoint places a renewal order for a single subscription, leveraging
the existing billing infrastructure. Use the
subscriptions endpoint to look up the
subscriptionId values available for renewal.
If no payment method is provided, your default payment method will be used automatically.
If the response is 202 Accepted, the payment is still being processed and the renewal will
complete asynchronously once the payment is confirmed.
Use this endpoint to renew any subscription available in your account.
POST/api/billing/v1/subscriptions/{subscriptionId}/renewhostinger-dns-mcpRetrieve particular DNS snapshot with contents of DNS zone records.
Use this endpoint to view historical DNS configurations for domains.
GET/api/dns/v1/snapshots/{domain}/{snapshotId}Retrieve DNS snapshots for a domain.
Use this endpoint to view available DNS backup points for restoration.
GET/api/dns/v1/snapshots/{domain}Restore DNS zone to the selected snapshot.
Use this endpoint to revert domain DNS to a previous configuration.
POST/api/dns/v1/snapshots/{domain}/{snapshotId}/restoreRetrieve DNS zone records for a specific domain.
Use this endpoint to view current DNS configuration for domain management.
GET/api/dns/v1/zones/{domain}Update DNS records for the selected domain.
Using overwrite = true will replace existing records with the provided ones.
Otherwise existing records will be updated and new records will be added.
Use this endpoint to modify domain DNS configuration.
PUT/api/dns/v1/zones/{domain}Delete DNS records for the selected domain.
To filter which records to delete, add the name of the record and type to the filter.
Multiple filters can be provided with single request.
If you have multiple records with the same name and type, and you want to delete only part of them,
refer to the Update zone records endpoint.
Use this endpoint to remove specific DNS records from domains.
DELETE/api/dns/v1/zones/{domain}Reset DNS zone to the default records.
Use this endpoint to restore domain DNS to original configuration.
POST/api/dns/v1/zones/{domain}/resetValidate DNS records prior to update for the selected domain.
If the validation is successful, the response will contain 200 Success code.
If there is validation error, the response will fail with 422 Validation error code.
Use this endpoint to verify DNS record validity before applying changes.
POST/api/dns/v1/zones/{domain}/validatehostinger-domains-mcpRetrieve a list of pending and completed domain verifications.
GET/api/v2/direct/verifications/activeSuggest available domain names based on a free-text description of your project.
Suggestions are generated by an AI model, so they differ between calls.
Endpoint has rate limit of 90 requests per minute.
Use this endpoint to find a domain name when you only know what the website is about.
POST/api/domains/v1/availability/alternatives-from-descriptionSuggest available domain names based on a domain name you already have in mind.
Suggestions are generated by an AI model, so they differ between calls.
Endpoint has rate limit of 90 requests per minute.
Use this endpoint when the domain you wanted is taken and you need close alternatives.
POST/api/domains/v1/availability/alternatives-from-domainCheck availability of domain names across multiple TLDs.
Multiple TLDs can be checked at once.
If you want alternative domains with response, provide only one TLD and set with_alternatives to true.
TLDs should be provided without leading dot (e.g. com, net, org).
Endpoint has rate limit of 90 requests per minute.
Use this endpoint to verify domain availability before purchase.
POST/api/domains/v1/availabilityRetrieve domain forwarding data.
Use this endpoint to view current redirect configuration for domains.
GET/api/domains/v1/forwarding/{domain}Update domain forwarding configuration.
Use this endpoint to modify existing redirect configuration for domains.
PUT/api/domains/v1/forwarding/{domain}Delete domain forwarding data.
Use this endpoint to remove redirect configuration from domains.
DELETE/api/domains/v1/forwarding/{domain}Create domain forwarding configuration.
Use this endpoint to set up domain redirects to other URLs.
POST/api/domains/v1/forwardingRetrieve a pending IRTP verification for a domain.
Both the old and new registrant must confirm it before the WHOIS change takes effect.
Use this endpoint to check the status of a WHOIS change awaiting registrant confirmation.
GET/api/domains/v1/irtp/{domain}Cancel a pending IRTP verification.
Use this endpoint to back out of a WHOIS change that is stuck waiting on registrant confirmation, for example when the confirmation email cannot be received, without waiting out the 5-day expiry.
DELETE/api/domains/v1/irtp/{domain}Retrieve the incoming move for a specified domain.
Returns 404 when no account is moving this domain to you.
Use this endpoint to check whether a domain addressed to you is still waiting to be accepted.
GET/api/domains/v1/move/incoming/{domain}Accept an incoming move for a specified domain.
The provided WHOIS profiles become the contacts of the domain, so they must belong to your account and satisfy the requirements of the TLD. Only the contact types the domain actually uses are applied, but all four profile IDs have to be provided.
The move has to still be waiting for your decision, already accepted moves cannot be accepted again.
Accepting does not complete the move. A confirmation email is sent to the email address of
the new owner contact, and the domain changes hands only after the change is confirmed from it.
Until then the move stays in the activating status, which can be followed with the
incoming move endpoint.
Use this endpoint to take ownership of a domain offered to you.
PUT/api/domains/v1/move/incoming/{domain}Reject an incoming move for a specified domain.
The domain stays in the account which initiated the move. Moves you have already accepted cannot be rejected anymore.
Use this endpoint to decline a domain you do not want to take over.
DELETE/api/domains/v1/move/incoming/{domain}Retrieve all domains other Hostinger accounts are moving to your account.
Moves of every status are returned, including the ones which already completed.
Use this endpoint to find domains waiting for you to accept them.
GET/api/domains/v1/move/incomingRetrieve the outgoing move for a specified domain.
Returns 404 when the domain has no move in progress.
Use this endpoint to track the status of a move you have initiated for a single domain.
GET/api/domains/v1/move/outgoing/{domain}Initiate a move of a specified domain to another Hostinger account.
The receiving account has to already exist and accept the move before the domain changes hands.
The domain must be active. The subscription it belongs to is resolved automatically, and the request is rejected with a 404 status code when the domain has no domain subscription of its own.
Domains protected by premium protection require an additional verification step, such requests are rejected with a 428 status code.
Use this endpoint to hand a domain over to another Hostinger user.
POST/api/domains/v1/move/outgoing/{domain}Cancel an outgoing move for a specified domain.
The move can only be cancelled while the receiving account has not accepted it yet. The domain stays in your account.
Use this endpoint to withdraw a move you no longer want to complete.
DELETE/api/domains/v1/move/outgoing/{domain}Retrieve all domains you are moving to other Hostinger accounts.
Only moves which have not completed yet are returned.
Use this endpoint to track moves you have initiated and the accounts they are addressed to.
GET/api/domains/v1/move/outgoingRetrieve the authorization (EPP) code for a specified domain so it can be transferred away from Hostinger to another registrar.
Requesting a new code invalidates any code retrieved previously.
Use this endpoint to obtain the code required to transfer a domain to another registrar.
GET/api/domains/v1/portfolio/{domain}/auth-codeClaim a free domain available on your account and register it.
Unlike purchasing a domain, this consumes a free domain you already have, so no payment method is required.
A successful response means the domain is registered. If registration fails, login to hPanel and check domain registration status.
If no WHOIS information is provided, default contact information for that TLD will be used. Before making request, ensure WHOIS information for desired TLD exists in your account.
Some TLDs require additional_details to be provided and these will be validated before claiming.
Requests which cannot be fulfilled are rejected with an error code in the response body,
for example 2037 when no free domain is available.
Use this endpoint to register a domain using a free domain from your account.
POST/api/domains/v1/portfolio/claimEnable domain lock for the domain.
When domain lock is enabled, the domain cannot be transferred to another registrar without first disabling the lock.
Use this endpoint to secure domains against unauthorized transfers.
PUT/api/domains/v1/portfolio/{domain}/domain-lockDisable domain lock for the domain.
Domain lock needs to be disabled before transferring the domain to another registrar.
Use this endpoint to prepare domains for transfer to other registrars.
DELETE/api/domains/v1/portfolio/{domain}/domain-lockRetrieve detailed information for specified domain.
Use this endpoint to view comprehensive domain configuration and status.
GET/api/domains/v1/portfolio/{domain}Retrieve all domains associated with your account.
Use this endpoint to view user's domain portfolio.
GET/api/domains/v1/portfolioPurchase and register a new domain name.
If registration fails, login to hPanel and check domain registration status.
If no payment method is provided, your default payment method will be used automatically.
If the response is 202 Accepted, the payment is still being processed and the domain was
not registered. Once the order completes, register the domain from
hPanel.
If no WHOIS information is provided, default contact information for that TLD will be used. Before making request, ensure WHOIS information for desired TLD exists in your account.
Some TLDs require additional_details to be provided and these will be validated before completing purchase.
Use this endpoint to register new domains for users.
POST/api/domains/v1/portfolioEnable privacy protection for the domain.
When privacy protection is enabled, domain owner's personal information is hidden from public WHOIS database.
Use this endpoint to protect domain owner's personal information from public view.
PUT/api/domains/v1/portfolio/{domain}/privacy-protectionDisable privacy protection for the domain.
When privacy protection is disabled, domain owner's personal information is visible in public WHOIS database.
Use this endpoint to make domain owner's information publicly visible.
DELETE/api/domains/v1/portfolio/{domain}/privacy-protectionRetrieve renewal information for a specified domain, including its status and current expiration date.
Use this endpoint to build renewal automation and expiry monitoring for a single domain.
GET/api/domains/v1/portfolio/{domain}/renewalRegister a domain you have already paid for but which has not been set up yet.
Use this endpoint when an order completed without registering the domain, for example when
Purchase new domain returned 202 Accepted and the domain was added to your account without
being registered, or when an earlier setup attempt failed. No new order is placed and no payment
is taken: the subscription you already own is used, for the period you already paid for.
A domain is left awaiting setup when the details needed to register it were missing or invalid
as the order completed. Domains ordered elsewhere can be awaiting setup for the same reason.
Complete the missing information, then call this endpoint. If the order itself has not completed
yet, the domain is not on your account, wait until it appears in Get domain list.
If domain_contacts is omitted, the default WHOIS profile of that TLD is used for all four
roles. The profile must exist and be complete for the TLD, an incomplete profile is the most
common reason a domain is left awaiting setup. Create one with Create WHOIS profile.
Some TLDs require additional_details. These are validated before setup, so a missing or
invalid value is rejected without any registration being attempted.
The domain is set up with the default nameservers and without privacy protection. Use
Update domain nameservers and Enable privacy protection afterwards to change either.
A successful response means the setup request was accepted, not that the domain is already
registered. Poll Get domain list for the outcome, the domain appears in Get domain details
only once it is registered.
Use this endpoint to finish registering a domain that is awaiting setup on your account.
POST/api/domains/v1/portfolio/{domain}/setupSet nameservers for a specified domain.
Be aware, that improper nameserver configuration can lead to the domain being unresolvable or unavailable.
Use this endpoint to configure custom DNS hosting for domains.
PUT/api/domains/v1/portfolio/{domain}/nameserversClaim a free domain transfer available on your account and start the transfer.
Unlike purchasing a transfer, this consumes a free domain transfer you already have, so no payment method is required.
Before making request, unlock the domain at the current registrar and get its authorization code. The transfer is validated first, so domains which cannot be transferred are rejected before the free domain transfer is consumed.
A successful response means the transfer has been started. Completion depends on the current registrar and can be followed with the transfer list endpoint.
If no WHOIS information is provided, default contact information for that TLD will be used. Before making request, ensure WHOIS information for desired TLD exists in your account.
Requests which cannot be fulfilled are rejected with an error code in the response body.
Use this endpoint to transfer a domain using a free domain transfer from your account.
POST/api/domains/v1/transfers/claimRetrieve the transfer for a specified domain.
Use this endpoint to track an incoming or outgoing registrar transfer and its status.
GET/api/domains/v1/transfers/{domain}Retrieve all domain transfers in your portfolio.
Use this endpoint to monitor incoming and outgoing registrar transfers across your domains.
GET/api/domains/v1/transfersTransfer a domain from another registrar to your account.
The transfer runs on a domain transfer service you have already purchased.
Before making request, unlock the domain at the current registrar and get its authorization code.
A successful response means the transfer has been started. Completion depends on the current registrar and can be followed with the transfer list endpoint.
If no WHOIS information is provided, default contact information for that TLD will be used. Before making request, ensure WHOIS information for desired TLD exists in your account.
Use this endpoint to bring domains registered elsewhere into your account.
POST/api/domains/v1/transfersChange WHOIS contact profile for a domain.
Repoints the given contact roles to a new WHOIS profile and submits the change to the registry. The profile currently assigned to those roles is resolved automatically; the request fails if the given roles are not all on the same profile today.
Changing transfer sensitive fields on the owner contact starts an IRTP verification.
The change is processed asynchronously.
Use this endpoint to move a registered domain onto different contact information.
PUT/api/domains/v1/whois/changeSet WHOIS contact profile as default.
The default profile is pre-selected for the TLD it belongs to when registering new domains.
Use this endpoint to avoid picking contact information for every registration.
PUT/api/domains/v1/whois/default/{whoisId}Unset WHOIS contact profile as default.
The profile itself is kept, it is only no longer pre-selected for its TLD.
Use this endpoint to stop reusing contact information for new registrations.
DELETE/api/domains/v1/whois/default/{whoisId}Retrieve a WHOIS contact profile.
Use this endpoint to view domain registration contact information.
GET/api/domains/v1/whois/{whoisId}Delete WHOIS contact profile.
Use this endpoint to remove unused contact profiles from account.
DELETE/api/domains/v1/whois/{whoisId}Retrieve WHOIS contact profiles.
Use this endpoint to view available contact profiles for domain registration.
GET/api/domains/v1/whoisCreate WHOIS contact profile.
Use this endpoint to add new contact information for domain registration.
POST/api/domains/v1/whoisRetrieve domain list where provided WHOIS contact profile is used.
Use this endpoint to view which domains use specific contact profiles.
GET/api/domains/v1/whois/{whoisId}/usagehostinger-ecommerce-mcpList a store's discounts. Filter by free text over code and name, or by disabled state. Amounts for fixed discounts are integers in the smallest currency unit; percentage discounts carry a whole-number value between 1 and 100.
GET/api/ecommerce/v1/stores/{store_id}/discountsCreate a discount for a store. Fixed discounts take an amount in the smallest currency unit (e.g. $10 is 1000); percentage discounts take a whole-number value between 1 and 100. Free-shipping discounts ignore value. Returns the created discount.
POST/api/ecommerce/v1/stores/{store_id}/discountsRetrieve step-by-step setup instructions, formatted as Markdown, for connecting a custom sales channel to your store and keeping your catalog, orders, shipping and payments in sync through the Ecommerce API.
GET/api/ecommerce/v1/miscellaneous/custom-storefront-instructionsCancel the order and optionally email the customer. Returns the updated order summary.
POST/api/ecommerce/v1/stores/{store_id}/orders/{order_id}/cancelCreate a fulfilment for the order and attach tracking in one call. Omit items to fulfil every remaining unfulfilled item. Returns the updated order summary.
POST/api/ecommerce/v1/stores/{store_id}/orders/{order_id}/fulfillList a store's orders newest first as summaries. Filter by status, payment or fulfilment status, customer email, order number or a free-text query. Amounts are in the smallest currency unit. Retrieve a single order for its line items, addresses and fulfilments.
GET/api/ecommerce/v1/stores/{store_id}/ordersRetrieve one order in full: line items (each with the id the fulfil endpoint needs), addresses, the totals breakdown and fulfilments with tracking. Amounts are in the smallest currency unit.
GET/api/ecommerce/v1/stores/{store_id}/orders/{order_id}Enable a manual payment method so the store can accept orders without an online payment provider.
POST/api/ecommerce/v1/stores/{store_id}/payment-methods/manualCreate an onboarding link for connecting a payment gateway to the store. Returns the gateway onboarding URL for the merchant to open and a deep-link into the store admin.
POST/api/ecommerce/v1/stores/{store_id}/payment-providers/{provider_id}/connect-linkList a store's payment providers, split into providers already connected to the store and gateways available to install. Never exposes gateway credentials, secrets, or configuration.
GET/api/ecommerce/v1/stores/{store_id}/payment-providersReturns a signed URL to upload a product image to (multipart/form-data POST). Then call the attach-image endpoint with the returned object_name to scan and attach it to the product.
POST/api/ecommerce/v1/stores/{store_id}/products/{product_id}/images/upload-urlDelete a product and its variants from the store. A subscription product with active subscribers is archived instead of deleted so its data stays available.
DELETE/api/ecommerce/v1/stores/{store_id}/products/{product_id}Update a product's name, description or status. Set status to published to make it buyable, draft to hide it, or archived to retire it. Variants, prices and inventory are managed through the variant endpoints, not here. Returns the updated product summary.
PATCH/api/ecommerce/v1/stores/{store_id}/products/{product_id}Create a published digital product with a single variant and an optional external download link.
POST/api/ecommerce/v1/stores/{store_id}/products/digitalList a store's products newest first as lean summaries (name, status, thumbnail, variant count and price range). Prices are integers in the smallest currency unit and live on variants. Filter by status, free text or a set of product ids. Use include=variants to embed each product's variants with prices and inventory, and include=media to embed its media.
GET/api/ecommerce/v1/stores/{store_id}/productsCreate a published physical product with a single variant priced in the store currency.
POST/api/ecommerce/v1/stores/{store_id}/products/physicalFetch a raster image (JPEG, PNG, GIF or WebP, max 15MB) from a URL and attach it to a product in a single call. Image downloads require HTTPS on port 443 without embedded credentials. At most one redirect is allowed, and its destination must meet the same requirements. Private or reserved network destinations, unsupported URLs and longer redirect chains are rejected. The image is virus-scanned and validated by content, then stored on the CDN. Set is_thumbnail to make it the product's primary image.
POST/api/ecommerce/v1/stores/{store_id}/products/{product_id}/imagesList a store's active sales channels with their full metadata.
GET/api/ecommerce/v1/stores/{store_id}/sales-channelsCreate a sales channel for a store. A "custom" channel is headless: build your own frontend and keep your catalog, orders, shipping and payments in sync through the Ecommerce API. A "quick-link" channel is a hosted one-page store whose handle is auto-generated.
POST/api/ecommerce/v1/stores/{store_id}/sales-channelsUpdate a custom sales channel. The merchant-facing name and the public url
(returned as the channel domain) can be changed. Pass null to clear a value.
PATCH/api/ecommerce/v1/stores/{store_id}/sales-channels/{sales_channel_id}Set the flat-rate shipping price for a store, creating the shipping zone if it does not exist yet.
POST/api/ecommerce/v1/stores/{store_id}/shippingSoft-delete a store owned by your account.
The underlying store data is preserved; only the store is marked as deleted.
DELETE/api/ecommerce/v1/stores/{store_id}Retrieve the stores associated with your account.
GET/api/ecommerce/v1/storesCreate a new store for your account.
A primary sales channel is created alongside the store.
POST/api/ecommerce/v1/storesGet a store's readiness metadata: whether payment methods and shipping are configured, plus its default currency. Useful to verify prerequisites before building a storefront.
GET/api/ecommerce/v1/stores/{store_id}/metadataUpdate up to 100 existing variants in place by id — title, inventory, stock tracking and prices. Variants omitted from the request are left untouched. Prices replace the variant's existing prices in full. Returns the updated variants.
PATCH/api/ecommerce/v1/stores/{store_id}/products/{product_id}/variants/batchDelete a single variant from the product.
DELETE/api/ecommerce/v1/stores/{store_id}/products/{product_id}/variants/{variant_id}List a product's variants, ordered by rank, with their options, prices and inventory. Prices are integers in the smallest currency unit and live on variants.
GET/api/ecommerce/v1/stores/{store_id}/products/{product_id}/variantsAdd a variant to a product along one or more option dimensions (e.g. Size, Color). Options missing from the product are created automatically; provide a value for every option the product already has. Prices are integers in the smallest currency unit and default to the store currency. Returns the created variant.
POST/api/ecommerce/v1/stores/{store_id}/products/{product_id}/variantshostinger-horizons-mcpClone a Hostinger Horizons website into a new website.\n
Use this tool when the user wants a copy of an existing website, for example to try out
changes without touching the original.\n
This tool returns the ID and URL of the newly created copy.
The original website is left untouched.\n
To edit the copy, use the Edit website tool with the returned website ID, or the user can
open the provided website URL in Hostinger Horizons interface.
POST/api/horizons/v1/websites/{websiteId}/cloneList the Hostinger Horizons websites the user owns.\n Use this tool when the user asks which websites they have, or when you need a website ID before editing, publishing or cloning a website.\n Each website is returned with its ID, status, domain and the URL to open it in Hostinger Horizons interface.\n The complete list of websites is returned in a single response - it is not paginated.
GET/api/horizons/v1/websitesCreate new Hostinger Horizons website from the given message.\n
Use this tool when user asks you to create a website, landing page, blog
or any other type of application.\n
This tool initiates the website creation process and returns a website URL and ID.
The generation happens asynchronously.\n
After invoking this tool, your chat reply must be EXACTLY 1 sentence summarizing
that Hostinger Horizons is now creating their website and it will be ready in a few minutes
and you should provide the website URL to the user immediately
Do not write code.\n\nTo edit afterwards, use the Edit website tool with the returned
website ID, or the user can go to Hostinger Horizons interface in the provided website URL.
If the tool call fails with an error, you should provide a clear explanation of the error
and do not generate code yourself in the chat.
\n
TECHNOLOGY STACK CONSTRAINTS (STRICTLY ENFORCED):\n
The environment is limited to the following technologies.
You MUST NOT use, suggest, or implement any technology outside this list:\n
\n
Language: JavaScript ONLY.
Languages like TypeScript, Rust, Python, Java, PHP, etc., are STRICTLY PROHIBITED.\n
Framework: React.\n
Navigation: React Router.\n
Styling: TailwindCSS.\n
Components: shadcn/ui (built with @radix-ui primitives).\n
Icons: Lucide React.\n
Animations: Framer Motion.\n \n BACKEND & DATA STORAGE:\n
Horizons integrated backend is the EXCLUSIVE solution for persistent data storage, authentication, and database needs.\n
Local databases (SQLite, MySQL, etc.) are STRICTLY PROHIBITED.\n
Third-party services (Firebase, AWS Amplify) are allowed ONLY if explicitly requested by the user.\n \n MAPS:\n
OpenStreetMap is the default provider.\n
Alternative providers (Google Maps, Mapbox) are allowed ONLY if explicitly requested by the user.\n
Method: POST
Path: /api/horizons/v1/websites
Edit an existing Hostinger Horizons website with a follow-up message.\n Use this tool when the user wants to change, extend or fix a website that already exists.\n This tool queues the requested changes and returns the website URL and ID. The changes are applied asynchronously.\n After invoking this tool, your chat reply must be EXACTLY 1 sentence summarizing that Hostinger Horizons is now applying the requested changes and they will be ready in a few minutes, and you should provide the website URL to the user immediately. Do not write code.\n If the tool call fails with an error, you should provide a clear explanation of the error and do not generate code yourself in the chat.
POST/api/horizons/v1/websites/{websiteId}/messagesPublish a Hostinger Horizons website so its latest changes go live.\n
Use this tool when the user asks to publish, deploy or make their website live.\n
This tool starts the publish process and returns the URL the website will be live on.
Publishing happens asynchronously and takes a few minutes.\n
Set is_template only when the user explicitly asks to share the website as a template:
true adds a "Use template" banner to its published pages that copies the website into the
visitor's own account, and false removes it. Leave it out to keep the current setting.\n
After invoking this tool, your chat reply must be EXACTLY 1 sentence summarizing
that the website is being published and you should provide the published URL to the user immediately.
POST/api/horizons/v1/websites/{websiteId}/publishGet the link for the user to open their website in Hostinger Horizons interface.\n
Use this tool when the user wants the link to an existing website, or when you need its
website URL before or after editing it.\n
is_in_progress is true while changes are being generated or the website is being published;
wait until it is false before publishing. published_at is when the website was last published,
is_template is whether its published pages show the "Use template" banner, and
has_ecommerce_store is whether it has an online store.\n
Websites can be edited with the Edit website tool, or by the user in Hostinger Horizons
interface in the provided website URL.
GET/api/horizons/v1/websites/{websiteId}hostinger-hosting-mcpImport 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.
customcustomDeploy 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.
customcustomDeploy 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.
customcustomDeploy 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.
customcustomDeploy 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.
customcustomList 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.
customcustomRetrieve logs for a specified JavaScript application deployment for debugging purposes in case of failure.
customcustomPermanently clears all server-side cache for the website at once. Use it when content was updated and needs to be visible immediately, or after making major changes.
Also purges the Hostinger CDN cache when CDN is enabled on the website. For a WordPress installation living in a subdirectory, pass the directory query parameter to clear its cache.
DELETE/api/hosting/v1/accounts/{username}/websites/{domain}/cache/clearTurns development (cacheless) mode on or off, based on the enabled flag. When enabled, nothing is cached, effectively turning off all caching for the website; use it while actively developing, testing changes, debugging issues, or when real-time updates must be visible. Disable it after finishing development work to restore the performance benefits of caching.
PATCH/api/hosting/v1/accounts/{username}/websites/{domain}/cacheless-mode/toggleTurns server-side caching for the website on or off, based on the enabled flag. Enable it for faster page loads, reduced server load, and improved user experience; recommended for production websites. Disabling may impact performance; to temporarily bypass caching while developing or debugging, prefer toggling cacheless mode instead.
Does nothing if caching is already in the requested state.
PATCH/api/hosting/v1/accounts/{username}/websites/{domain}/cache/toggleReturns the list of cron jobs configured for the specified account, including their schedule and command.
GET/api/hosting/v1/accounts/{username}/cron-jobsCreates a cron job for the specified account from a schedule expression and a command.
Returns the created cron job, including its uid, which is required to delete the cron job or fetch its output.
POST/api/hosting/v1/accounts/{username}/cron-jobsPermanently deletes the cron job identified by its uid.
The uid is returned by the list cron jobs endpoint.
DELETE/api/hosting/v1/accounts/{username}/cron-jobs/{uid}Returns the output captured from the last execution of the cron job identified by its uid.
The uid is returned by the list cron jobs endpoint.
GET/api/hosting/v1/accounts/{username}/cron-jobs/{uid}/outputChanges the password for the specified database user.
The database name must be the full name returned by the list databases endpoint. The password must also be updated in any website configuration that uses this database.
PATCH/api/hosting/v1/accounts/{username}/databases/{name}/change-passwordReturns a paginated list of databases for the specified account.
Use the domain and is_assigned filters to find databases assigned to a specific domain.
GET/api/hosting/v1/accounts/{username}/databasesCreates a database with a database user and password for the specified account.
The database name and user are automatically prefixed with the account username when needed.
POST/api/hosting/v1/accounts/{username}/databasesPermanently deletes a database and its remote connections.
The database name must be the full name returned by the list databases endpoint.
DELETE/api/hosting/v1/accounts/{username}/databases/{name}Allows a remote host to connect to the specified database.
Provide an IPv4/IPv6 address, or "%" to allow any host. The database name must be the full name returned by the list databases endpoint. Database creation is synchronous, so a 404 here means no database with that name exists under the username, not that it is still being created.
POST/api/hosting/v1/accounts/{username}/databases/{name}/remote-connectionsPermanently removes a remote-access rule, revoking the given host's remote access to the database.
Identify the rule with the required ip query parameter (the IPv4/IPv6 address, or "%", exactly as returned by the list remote connections endpoint). The database name must be the full name returned by the list databases endpoint.
DELETE/api/hosting/v1/accounts/{username}/databases/{name}/remote-connectionsReturns the remote-access rules for the specified account: the remote hosts (IPv4/IPv6 addresses, or "%" for any host) allowed to connect to the account databases.
Use the domain filter to only return rules for databases assigned to a specific domain.
GET/api/hosting/v1/accounts/{username}/databases/remote-connectionsRepairs corrupted database tables asynchronously.
Use when database errors, crashes, or corruption are reported. The database name must be the full name returned by the list databases endpoint.
PATCH/api/hosting/v1/accounts/{username}/databases/{name}/repairCreates a new MySQL database for the website and writes its connection details into the website's environment variables, then restarts the application. The platform generates the password (and the database name and user, unless supplied). The password is never returned; the application reads it from the environment.
Written variables: DB_HOST, DB_PORT, DB_NAME, DB_USER, DB_PASSWORD and
DATABASE_URL (mysql://user:password@host:port/name, user and password percent-encoded).
Existing variables are kept. If the website already has any variable with one of these
names the call fails with 422 and nothing is created; the Replace Node.js environment variables endpoint removes them.
After this call the variables are ordinary environment variables: the
Replace Node.js environment variables endpoint changes or removes them like any other.
A restart is enough for apps that read environment variables at process start, such as
Express or NestJS. Frameworks that bake variables into the build output (Next.js,
NEXT_PUBLIC_*) see the new values only after a fresh build (Start Node.js build endpoint).
A password in the request is ignored; the platform always generates it. The optional name
and user are identifiers, not secrets.
POST/api/hosting/v1/accounts/{username}/websites/{domain}/databases/setupReturns a direct sign-on link to phpMyAdmin for the specified database.
Use this when a visual database interface is needed for SQL queries, imports, exports, or table management. The database name must be the full name returned by the list databases endpoint.
GET/api/hosting/v1/accounts/{username}/databases/{name}/phpmyadmin-linkRetrieve a list of datacenters available for setting up hosting plans based on available datacenter capacity and hosting plan of your order. The first item in the list is the best match for your specific order requirements.
GET/api/hosting/v1/datacentersGenerate a unique free subdomain that can be used for hosting services without purchasing custom domains. Free subdomains allow you to start using hosting services immediately and you can always connect a custom domain to your site later.
POST/api/hosting/v1/domains/free-subdomainsRetrieve all parked or alias domains created under the selected website.
Use this endpoint to inspect parked domain configuration for a specific website, including the parent domain and root directory assigned to each parked domain.
GET/api/hosting/v1/accounts/{username}/websites/{domain}/parked-domainsCreate a parked or alias domain for the selected website.
Provide a domain name or IP address to park on the website so it serves the same content as the parent domain.
POST/api/hosting/v1/accounts/{username}/websites/{domain}/parked-domainsDelete an existing parked or alias domain from the selected website.
Use this endpoint to remove parked domains that are no longer needed.
DELETE/api/hosting/v1/accounts/{username}/websites/{domain}/parked-domains/{parkedDomain}Retrieve all subdomains created under the selected website.
Use this endpoint to inspect subdomain configuration for a specific website, including the parent domain and root directory assigned to each subdomain.
GET/api/hosting/v1/accounts/{username}/websites/{domain}/subdomainsCreate a new subdomain for the selected website.
Provide a subdomain prefix and, optionally, a custom directory or the website public directory to use as the subdomain root.
POST/api/hosting/v1/accounts/{username}/websites/{domain}/subdomainsDelete an existing subdomain from the selected website.
Use this endpoint to remove subdomains that are no longer needed.
DELETE/api/hosting/v1/accounts/{username}/websites/{domain}/subdomains/{subdomain}Verify ownership of a single domain and return the verification status.
Use this endpoint to check if a domain is accessible for you before using it for new websites.
If the domain is accessible, the response will have is_accessible: true.
If not, add the given TXT record to your domain's DNS records and try verifying again.
Keep in mind that it may take up to 10 minutes for new TXT DNS records to propagate.
Skip this verification when using Hostinger's free subdomains (*.hostingersite.com).
POST/api/hosting/v1/domains/verify-ownershipGenerate a file browser upload URL with authentication credentials for uploading files directly to a website's file storage.
While the website is still being set up (status: running on the list website setups
endpoint) this endpoint returns 409 with a Retry-After header: wait that many
seconds and retry, or poll the website setups until the status is completed.
Returns url, auth_key and rest_auth_key. Use these to upload a file to the
website's public_html directory via the TUS resumable upload protocol (TUS 1.0.0).
Send X-Auth: {auth_key} and X-Auth-Rest: {rest_auth_key} headers on every request
below.
POST to {url}/{relative_file_path}?override=true with headers
upload-length: {file size in bytes} and upload-offset: 0. Expect 201 Created.PATCH requests with an upload-offset header tracking progress) until complete.relative_file_path is the destination path inside public_html, e.g. app.zip.
Instead of a TUS client, plain curl also works:
FILE=app.zip
SIZE=$(stat -f%z "$FILE") # stat -c%s on Linux
curl -i -X POST "{url}/${FILE}?override=true" \
-H "X-Auth: {auth_key}" \
-H "X-Auth-Rest: {rest_auth_key}" \
-H "Tus-Resumable: 1.0.0" \
-H "Upload-Length: ${SIZE}" \
-H "Upload-Offset: 0"
# -> 201 Created
curl -i -X PATCH "{url}/${FILE}?override=true" \
-H "X-Auth: {auth_key}" \
-H "X-Auth-Rest: {rest_auth_key}" \
-H "Tus-Resumable: 1.0.0" \
-H "Content-Type: application/offset+octet-stream" \
-H "Upload-Offset: 0" \
--data-binary "@${FILE}"
# -> 204 No Content, Upload-Offset response header equals SIZE when done
POST/api/hosting/v1/files/upload-urlsList files and directories under a website's document root.
Use directory to browse a subdirectory relative to the document root. Symlinked entries
are listed but never traversed into or resolved.
GET/api/hosting/v1/accounts/{username}/domains/{domain}/filesGet a single file's content, relative to a website's document root.
Read-only; refuses symlinks, oversized files, non-text file types, and files identified as containing secrets (e.g. credential files) — none of these are returned by this endpoint.
GET/api/hosting/v1/accounts/{username}/domains/{domain}/files/contentReturns the Git auto-deployment settings of the website: which repository and branch deploy
into which directory, and whether pushes trigger a deployment. is_enabled false keeps the
repository link but ignores pushes.
When the website has no auto-deployment configured every field is null. Save settings with
Update Git auto-deployment settings.
GET/api/hosting/v1/accounts/{username}/websites/{domain}/git/auto-deployments/settingsCreates or replaces the Git auto-deployment settings of the website: repository, branch, the
directory under the document root to deploy into, and is_enabled. Send the full set;
is_enabled defaults to true and directory to the document root. installation_uuid must
be an installation from List Git installations that belongs to the same customer as the
website.
For PHP and static websites, saving with is_enabled true deploys the branch right away and
every later push to that branch deploys again. For Node.js and Website Builder websites saving
does not clone anything. On a Node.js website start the first deploy with
Start Node.js build using source_type git; pushes then trigger new builds with the build
settings stored for the website.
PUT/api/hosting/v1/accounts/{username}/websites/{domain}/git/auto-deployments/settingsRemoves the Git auto-deployment settings of the website. Files already deployed stay on the website; pushes stop deploying until settings are saved again. Succeeds also when nothing is configured.
DELETE/api/hosting/v1/accounts/{username}/websites/{domain}/git/auto-deployments/settingsLists the Git provider accounts the customer has connected. Only installations with status
active are returned unless the status filter says otherwise.
An empty list means the customer has no active installation. Check status=suspended and
status=pending as well. If there is none at all, a Git provider (GitHub or GitLab) has to be
connected once in hPanel (Websites, Manage, Advanced, Git; or Add Website, Node.js Web App,
Import Git Repository); this endpoint then lists the new installation.
Use uuid as the path parameter of List Git installation repositories, and as
installation_uuid in Start Node.js build with source_type git and in
Update Git auto-deployment settings.
GET/api/hosting/v1/git/installationsLists the repositories the Git installation can access, read live from the provider. Works for github and gitlab installations. Use an active installation: a suspended or pending one is still queried and the call fails with whatever the provider answers. The list is cut at the first 500 repositories in the order the provider returns them; when the account has more, name the repository directly instead of searching this list.
owner, name and a branch (default_branch or another one) go into source_options of
Start Node.js build or into Update Git auto-deployment settings. Returns 404 when the
installation does not belong to the customer. Limited to 10 calls per minute per API client
(429 above that).
GET/api/hosting/v1/git/installations/{uuid}/repositoriesClones a Git repository into a directory of the website, or pulls it again. An empty or missing
directory gets a clone of the branch. A directory that already holds this repository and branch is
reset to its last commit and pulled: changes made on the server to files the repository tracks are
discarded, files it does not track stay. A directory that holds other files, including another
repository or another branch of this one, is rejected. composer install runs after the clone or
pull when the repository has a composer.json.
The call waits for the deployment and returns its log. is_success false means Git or composer
failed and the log says why. A second call for the same directory is rejected while the first is
still waiting for the server. If the request times out, the deployment may still finish on the
server; calling again later with the same repository and branch pulls.
Private repositories need an SSH URL and the account's Git SSH key from Generate Git SSH key,
added to the repository as a deploy key.
POST/api/hosting/v1/accounts/{username}/websites/{domain}/git/repositories/deployLists the Git repositories linked to directories of the website, with
Deploy website Git repository or in the Git section of hPanel: clone URL, branch and directory of
each one. A repository whose clone failed stays listed; deploying it again retries the clone. GitHub
and GitLab auto-deployments are not listed here; see Get Git auto-deployment settings.
GET/api/hosting/v1/accounts/{username}/websites/{domain}/git/repositoriesReturns the public SSH key of the hosting account. Deploy website Git repository uses this key to
clone and pull over SSH, so a private repository works once the key is added to it as a deploy key
on the Git host. public_key is null when the account has no key yet.
GET/api/hosting/v1/accounts/{username}/git/ssh-keyCreates the SSH key pair of the hosting account and returns the public key. When the account already has a key, returns that key unchanged. One key serves every website of the account; add the public key to a private repository as a deploy key before deploying it.
POST/api/hosting/v1/accounts/{username}/git/ssh-keyRetrieve a paginated list of Node.js build processes for a specific website.
Each build represents a single run of the Node.js build pipeline. Use the states
query parameter to filter results by build state (pending, running, completed, failed).
Use the uuid from a build to poll its output via the Get Node.js Build Logs endpoint.
GET/api/hosting/v1/accounts/{username}/websites/{domain}/nodejs/buildsStart a Node.js build process using files already present on the website's file storage.
WARNING: on success this overwrites the website's existing contents and cannot be undone — verify this is intended before calling this endpoint.
With source_type archive, source_options.archive_path must point to an existing
archive file on the server (relative to the website document root). Use the
Generate Upload URL endpoint to obtain credentials and upload the archive first. To
auto-detect build settings from an archive before starting, first call the
Get Node.js Build Settings from Archive endpoint.
With source_type git, source_options carries owner, repository, branch and
installation_uuid. Take the installation from List Git installations and the owner and
repository from List Git installation repositories; the branch is cloned at its current
head. The installation must belong to the same customer as the website.
The returned build uuid can be used to poll progress and retrieve logs via
the Get Node.js Build Logs endpoint.
POST/api/hosting/v1/accounts/{username}/websites/{domain}/nodejs/buildsReturns the build settings stored for the website: framework (app_type), Node.js version,
root and output directory, build script, entry file and package manager. Stored settings
drive Git auto-deployment builds. A build started through the API uses the values sent in
that request and saves them here only when no settings exist yet.
Returns 404 until the first build or the first settings update stores them. Use this after
a failed build to check whether the framework or the entry file were detected wrong, then
fix them with the Update Node.js build settings endpoint.
GET/api/hosting/v1/accounts/{username}/websites/{domain}/nodejs/builds/settingsReplaces the build settings stored for the website. Send the full set: node_version is
required and every nullable field you omit is stored as null. Creates the settings when
none exist yet.
This does not start a build. Stored settings drive Git auto-deployment builds; a build
started through the API uses the values sent in that request, so to rebuild with corrected
settings call Start Node.js build with the same values. Typical fixes: a wrong app_type
after auto-detection, or a missing entry_file for express, fastify, nest, nuxt and hono
apps.
PUT/api/hosting/v1/accounts/{username}/websites/{domain}/nodejs/builds/settingsAuto-detect Node.js build settings from a package.json inside an archive already on the server.
Use this before calling Start Node.js Build to preview what settings will be used,
or to let the user review and override values (framework, node version, root directory,
output directory, build script) before committing to a build.
The archive must already be present on the website's file storage. Use the
Generate Upload URL endpoint to obtain credentials and upload the archive first.
GET/api/hosting/v1/accounts/{username}/websites/{domain}/nodejs/builds/settings/from-archiveLists the Node.js environment variables currently set for the website. Values are always
masked as ******** and cannot be read back through this API. Use this endpoint to see
which keys are configured or to verify a change, not to read values.
To change variables, use the Replace Node.js environment variables endpoint. It replaces
the whole set, so never copy the masked values from this response into that request; send
the full desired set with real values taken from the project .env file or the user
prompt instead.
GET/api/hosting/v1/accounts/{username}/websites/{domain}/nodejs/builds/settings/envReplaces the website's Node.js environment variables with the ones provided. This is a
full replace: any variable not in the request is deleted, and sending an empty env_vars
array deletes every variable. Saving writes the values and restarts the running Node.js
process.
A restart is enough for apps that read environment variables at process start, such as
Express or NestJS. It is not enough for frameworks that bake variables into the build.
Next.js standalone is one of those: build-time values (including NEXT_PUBLIC_*) need a
fresh build. After this call, use the Start Node.js build endpoint so those apps
pick up the new values.
The List Node.js environment variables endpoint returns masked values (********), so
never copy values from it into this request. Always send the full desired set with real
values taken from the project .env file or the user prompt.
PUT/api/hosting/v1/accounts/{username}/websites/{domain}/nodejs/builds/settings/envReturns an AI analysis of why a build failed and how to fix it, based on the build logs,
the project file list and package.json. Only builds in the failed state can be analysed;
any other state returns 422. When no analysis could be produced both analysis and
solution are null, in which case read Get NodeJS build logs instead.
Each call runs the analysis again, so call it once per failed build and keep the result. Limited to 5 calls per minute per API client (429 above that).
GET/api/hosting/v1/accounts/{username}/websites/{domain}/nodejs/builds/{uuid}/analysisReturns one build by UUID: its state (pending, running, completed, failed), the
options it ran with and timestamps. Poll this while a build is pending or running. When it
is failed, read Get NodeJS build logs and Analyse failed Node.js build for the cause.
Returns 404 when the UUID does not belong to a build of this website.
GET/api/hosting/v1/accounts/{username}/websites/{domain}/nodejs/builds/{uuid}Retrieve logs from a specific Node.js build process.
To stream live output while a build is running, poll this endpoint repeatedly
while the build state is running, passing the previously returned lines count
as from_line to fetch only new output since the last call.
Log content may contain ANSI escape sequences (color codes).
GET/api/hosting/v1/accounts/{username}/websites/{domain}/nodejs/builds/{uuid}/logsReturns the Node.js application's runtime console log entries, oldest first, each with
timestamp, level and message. On the first call send period (1h, 1d, 1w or 1m)
and optionally levels and limit (1-5000, default 1000); when more entries match than
limit, the newest are kept.
To poll for new entries send total_lines + 1 from the previous response as from_line
and omit period; period and from_line cannot be combined. Lines that are not JSON
with a timestamp, level and message are skipped, so logs may hold fewer than limit
entries while total_lines counts every raw line. Entries with a timestamp before
last_deployed_at belong to the previous deployment. Returns an empty logs list when
the application has not written a log file yet.
GET/api/hosting/v1/accounts/{username}/websites/{domain}/nodejs/runtime-logsEmpties the Node.js application's runtime log file. This cannot be undone, so confirm with the user before calling it. Returns success even when no log file exists yet.
Use it before reproducing a problem so the next Get Node.js runtime logs call returns
only fresh entries; start that call with period again instead of reusing a from_line
from before the clear.
DELETE/api/hosting/v1/accounts/{username}/websites/{domain}/nodejs/runtime-logsRestarts the Node.js server process for the website. Does not rebuild or redeploy the application. Use it to apply environment or configuration changes, or to recover a hung application.
Only applicable to server-side applications (Express, Next.js, NestJS, etc.). Static front-end apps (React, Vue, Vite) have no persistent server process, so restarting them has no effect. Returns success even when the website has no server process to restart.
POST/api/hosting/v1/accounts/{username}/websites/{domain}/nodejs/server/restartLists known npm package vulnerabilities detected on a Node.js website, enriched with
advisory metadata (severity, CVSS score, CVE, advisory URL). Results are sorted from
the most severe to the least severe, then by publish date (newest first). Use the
severities query parameter to filter.
Vulnerabilities with is_patchable set to true can be auto-fixed via the
Patch Node.js Vulnerabilities endpoint, which opens a GitHub pull request with
updated package versions. Auto-fix is only available for websites deployed from a
connected GitHub repository. Vulnerabilities with is_patching_in_progress set to
true are already included in an open patch pull request; while any patch pull
request is open, new patch requests for this website are rejected until it is merged
or closed.
Data comes from periodic dependency scans, so it may lag behind the latest deployment. An empty list means the most recent scan found no vulnerabilities; it does not guarantee the current deployment is vulnerability-free. Available on Business and Cloud Hosting plans.
GET/api/hosting/v1/accounts/{username}/websites/{domain}/nodejs/vulnerabilitiesPatches the selected Node.js vulnerabilities by updating the affected package versions in `package.j
Dynamic and reflective problem-solving through thought sequences
MOmodelcontextprotocol/servers91k近 7 天新增 182 个 star
Model Context Protocol(MCP) 编程极速入门
LIliaokongVFX/MCP-Chinese-Getting-Started-Guide3.6k近 7 天新增 4 个 star
Local MCP work notes with persistent sessions, decisions, evidence and resumable tasks.
ARarben-adm/mcp-sequential-thinking954近 7 天新增 2 个 star
Harness the power of local LLMs with this TUI MCP Client for Ollama. Featuring all core MCP primitives (tools, prompts, resources), agent mode, multi-server, model switching, streaming responses, human-in-the-loop, thinking mode, model params config, system prompts, and saved preferences.
JOjonigl/mcp-client-for-ollama829近 7 天新增 3 个 star