npx skills add ...
npx skills add hostinger/hostinger-agent-skills --skill vps
Hostinger VPS API for virtual machine management, Docker projects, firewalls, SSH keys, backups, snapshots, OS templates, post-install scripts, recovery mode, malware scanning, PTR records, and metrics. Use when creating, managing, or troubleshooting VPS instances, deploying Docker containers, configuring firewalls, or managing server infrastructure.
npx skills add hostinger/hostinger-agent-skills --skill vps
The VPS API provides comprehensive management of virtual private servers — from purchasing and setup to Docker deployments, firewall configuration, SSH keys, backups, snapshots, OS reinstallation, recovery mode, malware scanning, and performance monitoring.
VPS instances with dedicated CPU, RAM, disk, and network resources. Each VM has an OS template, root access, and an IP address. VMs go through states: initial → running → stopped.
Asynchronous operations on VMs (start, stop, restart, recreate, etc.) return an action resource with a status you can poll.
Deploy and manage Docker Compose projects directly on VPS instances. Supports creating projects from docker-compose.yaml content or GitHub URLs.
Network security rules that control inbound traffic. By default, all incoming traffic is dropped — you must explicitly add accept rules. Only one firewall can be active per VM at a time. Changes require manual sync to take effect.
SSH keys for authentication. Keys are managed at the account level and attached to specific VMs.
Pre-configured operating system images for VM installation (Ubuntu, Debian, CentOS, etc.) including panel templates (e.g., with cPanel or Plesk).
Automation scripts that run after VM installation. Saved to /post_install with executable permissions. Output goes to /post_install.log. Maximum size: 48KB.
Boot the VM from a recovery disk image for system rescue. The original disk is mounted at /mnt.
Optional security tool for malware detection and prevention on VPS instances.
CLI (hapi):
Python SDK:
TypeScript SDK:
PHP SDK:
| Method | Endpoint | Description |
|---|---|---|
GET | /api/vps/v1/virtual-machines | List all VMs |
POST | /api/vps/v1/virtual-machines | Purchase new VM |
GET | /api/vps/v1/virtual-machines/{id} | Get VM details |
POST | /api/vps/v1/virtual-machines/{id}/setup | Setup purchased VM |
POST | /api/vps/v1/virtual-machines/{id}/start | Start VM |
POST | /api/vps/v1/virtual-machines/{id}/stop | Stop VM |
POST | /api/vps/v1/virtual-machines/{id}/restart | Restart VM |
POST | /api/vps/v1/virtual-machines/{id}/recreate | Recreate VM (destructive) |
PUT | /api/vps/v1/virtual-machines/{id}/hostname | Set hostname |
DELETE | /api/vps/v1/virtual-machines/{id}/hostname | Reset hostname |
PUT | /api/vps/v1/virtual-machines/{id}/root-password | Set root password |
PUT | /api/vps/v1/virtual-machines/{id}/panel-password | Set panel password |
PUT | /api/vps/v1/virtual-machines/{id}/nameservers | Set nameservers |
GET | /api/vps/v1/virtual-machines/{id}/metrics | Get metrics |
GET | /api/vps/v1/virtual-machines/{id}/public-keys | Get attached SSH keys |
GET | /api/vps/v1/virtual-machines/{id}/actions | Get action history |
GET | /api/vps/v1/virtual-machines/{id}/actions/{actionId} | Get action details |
| Method | Endpoint | Description |
|---|---|---|
GET | .../docker | List projects |
POST | .../docker | Create project |
GET | .../docker/{name} | Get project contents |
GET | .../docker/{name}/containers | Get containers with stats |
GET | .../docker/{name}/logs | Get project logs (last 300) |
POST | .../docker/{name}/start | Start project |
POST | .../docker/{name}/stop | Stop project |
POST | .../docker/{name}/restart | Restart project |
POST | .../docker/{name}/update | Update project |
DELETE | .../docker/{name}/down | Delete project (irreversible) |
| Method | Endpoint | Description |
|---|---|---|
GET | /api/vps/v1/firewall | List firewalls |
POST | /api/vps/v1/firewall | Create firewall |
GET | /api/vps/v1/firewall/{id} | Get firewall details |
DELETE | /api/vps/v1/firewall/{id} | Delete firewall |
POST | /api/vps/v1/firewall/{id}/rules | Create rule |
PUT | /api/vps/v1/firewall/{id}/rules/{ruleId} | Update rule |
DELETE | /api/vps/v1/firewall/{id}/rules/{ruleId} | Delete rule |
POST | /api/vps/v1/firewall/{id}/activate/{vmId} | Activate on VM |
POST | /api/vps/v1/firewall/{id}/deactivate/{vmId} | Deactivate on VM |
POST | /api/vps/v1/firewall/{id}/sync/{vmId} | Sync rules to VM |
| Method | Endpoint | Description |
|---|---|---|
GET/POST/DELETE | /api/vps/v1/public-keys | Manage SSH keys |
POST | /api/vps/v1/public-keys/attach/{vmId} | Attach keys to VM |
GET | /api/vps/v1/templates | List OS templates |
GET | /api/vps/v1/templates/{id} | Get template details |
GET/POST/PUT/DELETE | /api/vps/v1/post-install-scripts | Manage scripts |
GET | /api/vps/v1/data-centers | List data centers |
GET | .../backups | List backups |
POST | .../backups/{id}/restore | Restore backup |
GET/POST/DELETE | .../snapshot | Manage snapshot |
POST | .../snapshot/restore | Restore snapshot |
POST/DELETE | .../recovery | Start/stop recovery mode |
POST/DELETE | .../ptr/{ipId} | Manage PTR records |
GET/POST/DELETE | .../monarx | Manage malware scanner |
/mntdocker-compose.yaml in master branch/post_install, output goes to /post_install.loginitial state — run setup firstPOST .../firewall/{id}/sync/{vmId}GET .../docker/{name}/logsGET .../actions/{actionId}The following deep-dive guides are available in this skill directory:
deployment-workflow.md — SSH-first deployment workflow for Dockerized apps (7-step process, rollback strategy, verification levels)docker-patterns.md — Docker Compose deployment patterns (WordPress, Node+Redis+Postgres, Traefik SSL, lifecycle management)firewall-patterns.md — Common firewall configurations (web server, database, Docker host, mail server, TypeScript/PHP examples)terraform-examples.md — Infrastructure as Code with the Hostinger Terraform Provider (VPS provisioning, SSH keys, firewalls, complete infra example)hapi vps vm listfrom hostinger_api import Hostinger
client = Hostinger(api_token="YOUR_API_TOKEN")
# List all VPS instances
vms = client.vps.virtual_machines.list()
for vm in vms:
print(f"{vm.hostname} - {vm.state} - {vm.ip_address}")import { Hostinger } from "hostinger-api-sdk";
const client = new Hostinger({ apiToken: "YOUR_API_TOKEN" });
const vms = await client.vps.virtualMachines.list();
for (const vm of vms) {
console.log(`${vm.hostname} - ${vm.state} - ${vm.ipAddress}`);
}use Hostinger\Api\HostingerApi;
$client = new HostingerApi('YOUR_API_TOKEN');
$vms = $client->vps->virtualMachines->list();
foreach ($vms as $vm) {
echo "{$vm->hostname} - {$vm->state} - {$vm->ip_address}\n";
}# List all VMs
curl -X GET "https://developers.hostinger.com/api/vps/v1/virtual-machines" \
-H "Authorization: Bearer $HOSTINGER_API_TOKEN"
# Get VM details
curl -X GET "https://developers.hostinger.com/api/vps/v1/virtual-machines/12345" \
-H "Authorization: Bearer $HOSTINGER_API_TOKEN"
# Start VM
curl -X POST "https://developers.hostinger.com/api/vps/v1/virtual-machines/12345/start" \
-H "Authorization: Bearer $HOSTINGER_API_TOKEN"
# Stop VM
curl -X POST "https://developers.hostinger.com/api/vps/v1/virtual-machines/12345/stop" \
-H "Authorization: Bearer $HOSTINGER_API_TOKEN"
# Restart VM
curl -X POST "https://developers.hostinger.com/api/vps/v1/virtual-machines/12345/restart" \
-H "Authorization: Bearer $HOSTINGER_API_TOKEN"
# Set hostname
curl -X PUT "https://developers.hostinger.com/api/vps/v1/virtual-machines/12345/hostname" \
-H "Authorization: Bearer $HOSTINGER_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{ "hostname": "new-hostname.example.com" }'
# Set root password
curl -X PUT "https://developers.hostinger.com/api/vps/v1/virtual-machines/12345/root-password" \
-H "Authorization: Bearer $HOSTINGER_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{ "password": "NewSecurePass123!" }'
# Recreate VM (DESTRUCTIVE - all data lost)
curl -X POST "https://developers.hostinger.com/api/vps/v1/virtual-machines/12345/recreate" \
-H "Authorization: Bearer $HOSTINGER_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"template_id": 1,
"password": "SecurePass123!"
}'# List Docker projects on a VM
curl -X GET "https://developers.hostinger.com/api/vps/v1/virtual-machines/12345/docker" \
-H "Authorization: Bearer $HOSTINGER_API_TOKEN"
# Deploy from docker-compose.yaml content
curl -X POST "https://developers.hostinger.com/api/vps/v1/virtual-machines/12345/docker" \
-H "Authorization: Bearer $HOSTINGER_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"project_name": "my-app",
"content": "version: \"3\"\nservices:\n web:\n image: nginx:latest\n ports:\n - \"80:80\""
}'
# Deploy from GitHub URL
curl -X POST "https://developers.hostinger.com/api/vps/v1/virtual-machines/12345/docker" \
-H "Authorization: Bearer $HOSTINGER_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"project_name": "my-app",
"url": "https://github.com/user/repo"
}'
# Get project containers and stats
curl -X GET "https://developers.hostinger.com/api/vps/v1/virtual-machines/12345/docker/my-app/containers" \
-H "Authorization: Bearer $HOSTINGER_API_TOKEN"
# View project logs (last 300 entries)
curl -X GET "https://developers.hostinger.com/api/vps/v1/virtual-machines/12345/docker/my-app/logs" \
-H "Authorization: Bearer $HOSTINGER_API_TOKEN"
# Start / Stop / Restart / Update / Delete project
curl -X POST ".../docker/my-app/start" -H "Authorization: Bearer $HOSTINGER_API_TOKEN"
curl -X POST ".../docker/my-app/stop" -H "Authorization: Bearer $HOSTINGER_API_TOKEN"
curl -X POST ".../docker/my-app/restart" -H "Authorization: Bearer $HOSTINGER_API_TOKEN"
curl -X POST ".../docker/my-app/update" -H "Authorization: Bearer $HOSTINGER_API_TOKEN"
curl -X DELETE ".../docker/my-app/down" -H "Authorization: Bearer $HOSTINGER_API_TOKEN"# Create a firewall
curl -X POST "https://developers.hostinger.com/api/vps/v1/firewall" \
-H "Authorization: Bearer $HOSTINGER_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{ "name": "web-server" }'
# Add rules (default drops all — add accept rules for ports you need)
curl -X POST "https://developers.hostinger.com/api/vps/v1/firewall/1/rules" \
-H "Authorization: Bearer $HOSTINGER_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"protocol": "tcp",
"port": "80",
"source": "0.0.0.0/0",
"action": "accept"
}'
# Activate firewall on a VM
curl -X POST "https://developers.hostinger.com/api/vps/v1/firewall/1/activate/12345" \
-H "Authorization: Bearer $HOSTINGER_API_TOKEN"
# Sync firewall after rule changes
curl -X POST "https://developers.hostinger.com/api/vps/v1/firewall/1/sync/12345" \
-H "Authorization: Bearer $HOSTINGER_API_TOKEN"# Create SSH key
curl -X POST "https://developers.hostinger.com/api/vps/v1/public-keys" \
-H "Authorization: Bearer $HOSTINGER_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "my-laptop",
"key": "ssh-ed25519 AAAA... user@host"
}'
# Attach key to VM
curl -X POST "https://developers.hostinger.com/api/vps/v1/public-keys/attach/12345" \
-H "Authorization: Bearer $HOSTINGER_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{ "ids": [1, 2] }'
# List keys on a VM
curl -X GET "https://developers.hostinger.com/api/vps/v1/virtual-machines/12345/public-keys" \
-H "Authorization: Bearer $HOSTINGER_API_TOKEN"# List backups
curl -X GET "https://developers.hostinger.com/api/vps/v1/virtual-machines/12345/backups" \
-H "Authorization: Bearer $HOSTINGER_API_TOKEN"
# Restore a backup (DESTRUCTIVE - overwrites all data)
curl -X POST "https://developers.hostinger.com/api/vps/v1/virtual-machines/12345/backups/99/restore" \
-H "Authorization: Bearer $HOSTINGER_API_TOKEN"
# Create a snapshot (overwrites existing snapshot)
curl -X POST "https://developers.hostinger.com/api/vps/v1/virtual-machines/12345/snapshot" \
-H "Authorization: Bearer $HOSTINGER_API_TOKEN"
# Get current snapshot
curl -X GET "https://developers.hostinger.com/api/vps/v1/virtual-machines/12345/snapshot" \
-H "Authorization: Bearer $HOSTINGER_API_TOKEN"
# Restore from snapshot
curl -X POST "https://developers.hostinger.com/api/vps/v1/virtual-machines/12345/snapshot/restore" \
-H "Authorization: Bearer $HOSTINGER_API_TOKEN"# Get VM metrics (CPU, memory, disk, network, uptime)
curl -X GET "https://developers.hostinger.com/api/vps/v1/virtual-machines/12345/metrics?date_from=2025-05-01T00:00:00Z&date_to=2025-06-01T00:00:00Z" \
-H "Authorization: Bearer $HOSTINGER_API_TOKEN"