A complete PHP SDK for interacting with the Hostinger API, allowing you to programmatically manage your Hostinger resources including VPS, domains, billing, and more.
- Don't Have a Hostinger Account?
- Installation
- API Token
- Usage
- Domains
- DNS
- Billing
- VPS
- Actions
- Backups
- Data Centers
- PTR Records
- Firewall
- Malware Scanner
- OS Templates
- Post-Install Scripts
- Public Keys
- Recovery
- Snapshots
- Virtual Machine
- Get Attached Public Keys
- Set Hostname
- Reset Hostname
- Get Virtual Machine
- Get Virtual Machine List
- Purchase New Virtual Machine
- Get Metrics
- Set Nameservers
- Set Panel Password
- Recreate Virtual Machine
- Restart Virtual Machine
- Set Root Password
- Setup New Virtual Machine
- Start Virtual Machine
- Stop Virtual Machine
- Testing
- Contributing
- Credits
- License
Hostinger offers affordable web hosting and VPS solutions with excellent performance, uptime and has an amazing support team. If you don't have a Hostinger account yet, you can sign up using this referral link to get 20% additional discount on top of Hostinger's regular discounts.
Disclaimer: If you use the referral link, I may earn a commission from Hostinger and you'll get 20% discount on your purchase.
You can install the package via composer:
composer require derrickob/hostinger-php-sdkTo use this SDK, you'll need an API token from Hostinger. You can create one from the Account page of the Hostinger Panel.
use DerrickOb\HostingerApi\Hostinger;
// Initialize with just an API token
$hostinger = new Hostinger('your-api-token');
// Or with additional options
$hostinger = new Hostinger('your-api-token', [
'timeout' => 30, // Request timeout in seconds
'base_url' => 'https://developers.hostinger.com', // API base URL
'api_version' => 'v1', // API version
]);All API errors are converted to exceptions:
use DerrickOb\HostingerApi\Exceptions\ApiException;
use DerrickOb\HostingerApi\Exceptions\AuthenticationException;
use DerrickOb\HostingerApi\Exceptions\ValidationException;
use DerrickOb\HostingerApi\Exceptions\RateLimitException;
try {
$catalogs = $hostinger->billing()->catalog()->list();
} catch (AuthenticationException $e) {
// Handle authentication errors (401)
$message = $e->getMessage();
} catch (ValidationException $e) {
// Handle validation errors (422)
$message = $e->getMessage();
// Get detailed validation errors
$errors = $e->getErrors(); // ['field_1' => ['Error message 1', ...], ...]
} catch (RateLimitException $e) {
// Handle rate limit errors (429)
$message = $e->getMessage();
} catch (ApiException $e) {
// Handle any other API errors (4xx, 5xx)
$message = $e->getMessage();
$code = $e->getCode();
// Get correlation ID for support
$correlationId = $e->getCorrelationId();
}Access domain-related features via $hostinger->domains().
Access domain availability checks via $hostinger->domains()->availability().
Checks the availability of a domain name across multiple TLDs. Can optionally return alternative suggestions.
Doc: API Reference
$data = [
'domain' => 'mydomain',
'tlds' => ['com', 'net', 'org'],
'with_alternatives' => false, // Optional: Set to true for suggestions
];
$results = $hostinger->domains()->availability()->check($data);
foreach ($results as $result) {
$result->domain; // mydomain.com
$result->is_available; // true
$result->is_alternative; // false
$result->restriction; // null
$result->toArray(); // ['domain' => 'mydomain.com', 'is_available' => true, ...]
}Manage domain forwarding via $hostinger->domains()->forwarding().
Retrieves domain forwarding data.
Doc: API Reference
$domainName = "mydomain.tld";
$forwarding = $hostinger->domains()->forwarding()->get($domainName);
$forwarding->domain; // mydomain.tld
$forwarding->redirect_type; // 301
$forwarding->redirect_url; // https://forward.to.my.url
$forwarding->created_at->format('Y-m-d H:i:s'); // 2025-02-27 11:54:22
$forwarding->updated_at?->format('Y-m-d H:i:s'); // 2025-03-19 11:54:22
$forwarding->toArray(); // ['domain' => 'mydomain.tld', 'redirect_type' => '301', ...]Deletes domain forwarding data.
Doc: API Reference
$domainName = "mydomain.tld";
$response = $hostinger->domains()->forwarding()->delete($domainName);
$response->message; // Request accepted
$response->toArray(); // ['message' => 'Request accepted']Creates domain forwarding data.
Doc: API Reference
$data = [
'domain' => 'mydomain.tld',
'redirect_type' => '301', // '301' (Permanent) or '302' (Temporary)
'redirect_url' => 'https://forward.to.my.url',
];
$forwarding = $hostinger->domains()->forwarding()->create($data);
$forwarding->domain; // mydomain.tld
$forwarding->redirect_type; // 301
$forwarding->redirect_url; // https://forward.to.my.url
$forwarding->created_at->format('Y-m-d H:i:s'); // 2025-02-27 11:54:22
$forwarding->updated_at?->format('Y-m-d H:i:s'); // 2025-03-19 11:54:22
$forwarding->toArray(); // ['domain' => 'mydomain.tld', 'redirect_type' => '301', ...]Manage your domain portfolio via $hostinger->domains()->portfolio().
Enables the transfer lock for a domain.
Doc: API Reference
$domainName = "mydomain.tld";
$response = $hostinger->domains()->portfolio()->enableDomainLock($domainName);
$response->message; // Request accepted
$response->toArray(); // ['message' => 'Request accepted']Disables the transfer lock for a domain.
Doc: API Reference
$domainName = "mydomain.tld";
$response = $hostinger->domains()->portfolio()->disableDomainLock($domainName);
$response->message; // Request accepted
$response->toArray(); // ['message' => 'Request accepted']Retrieves extended details for a specific domain.
Doc: API Reference
$domainName = "mydomain.tld";
$domainDetails = $hostinger->domains()->portfolio()->get($domainName);
$domainDetails->domain; // mydomain.tld
$domainDetails->status->value; // active
$domainDetails->message; // null
$domainDetails->is_privacy_protection_allowed; // true
$domainDetails->is_privacy_protected; // false
$domainDetails->is_lockable; // true
$domainDetails->is_locked; // true
$domainDetails->name_servers; // ['ns1' => 'ns1.example.tld', 'ns2' => 'ns2.example.tld']
$domainDetails->child_name_servers; // null or array
$domainDetails->domain_contacts; // ['admin_id' => 114698, ...]
$domainDetails->created_at->format('Y-m-d H:i:s'); // 2025-02-27 11:54:22
$domainDetails->updated_at->format('Y-m-d H:i:s'); // 2025-03-19 11:54:22
$domainDetails->sixty_days_lock_expires_at?->format('Y-m-d H:i:s'); // 2025-04-26 11:54:22
$domainDetails->registered_at?->format('Y-m-d H:i:s'); // 2025-02-27 11:54:22
$domainDetails->expires_at?->format('Y-m-d H:i:s'); // 2026-02-27 11:54:22
$domainDetails->toArray(); // ['domain' => 'mydomain.tld', 'status' => 'active', ...]Retrieves a list of all domains associated with your account.
Doc: API Reference
$domains = $hostinger->domains()->portfolio()->list();
foreach ($domains as $domain) {
$domain->id; // 13632
$domain->domain; // mydomain.tld or null
$domain->type->value; // domain or free_domain
$domain->status->value; // active, pending_setup, expired, requested, pending_verification
$domain->created_at->format('Y-m-d H:i:s'); // 2025-02-27 11:54:22
$domain->expires_at?->format('Y-m-d H:i:s'); // 2026-02-27 11:54:22
$domain->toArray(); // ['id' => 13632, 'domain' => 'mydomain.tld', ...]
}Purchases and registers a new domain name.
Doc: API Reference
$data = [
'domain' => 'mynewdomain.tld',
'item_id' => 'hostingercom-domain-tld-usd-1y', // Price Item ID from Catalog
'payment_method_id' => 1327362, // Optional: Uses default if omitted
'domain_contacts' => [ // Optional: Uses default TLD contacts if omitted
'owner_id' => 741288,
'admin_id' => 546123,
'billing_id' => 741288,
'tech_id' => 741288,
],
'additional_details' => [], // optional
'coupons' => ['Coupon 3'], // optional: discount coupon codes
];
$order = $hostinger->domains()->portfolio()->purchase($data);
$order->id; // 2957086
$order->status->value; // completed
$order->currency; // USD
$order->subtotal; // 899 (cents)
$order->total; // 1088 (cents)
$order->billing_address->first_name; // John
$order->billing_address->last_name; // Doe
$order->billing_address->company; // null
$order->billing_address->address_1; // null
$order->billing_address->address_2; // null
$order->billing_address->city; // null
$order->billing_address->state; // null
$order->billing_address->zip; // null
$order->billing_address->country; // NL
$order->billing_address->phone; // null
$order->billing_address->email; // [email protected]
$order->created_at->format('Y-m-d H:i:s'); // 2025-02-27 11:54:22
$order->updated_at->format('Y-m-d H:i:s'); // 2025-02-27 11:54:22
$order->toArray(); // ['id' => 2957086, 'subscription_id' => '...', 'status' => 'completed', 'billing_address' => [...], ...]Enables WHOIS privacy protection for a domain.
Doc: API Reference
$domainName = "mydomain.tld";
$response = $hostinger->domains()->portfolio()->enablePrivacyProtection($domainName);
$response->message; // Request accepted
$response->toArray(); // ['message' => 'Request accepted']Disables WHOIS privacy protection for a domain.
Doc: API Reference
$domainName = "mydomain.tld";
$response = $hostinger->domains()->portfolio()->disablePrivacyProtection($domainName);
$response->message; // Request accepted
$response->toArray(); // ['message' => 'Request accepted']Updates the nameservers for a domain.
Doc: API Reference
$domainName = "mydomain.tld";
$data = [
'ns1' => 'ns1.some-nameserver.tld',
'ns2' => 'ns2.some-nameserver.tld',
'ns3' => 'ns3.some-nameserver.tld', // optional
'ns4' => 'ns4.some-nameserver.tld', // optional
];
$response = $hostinger->domains()->portfolio()->updateNameservers($domainName, $data);
$response->message; // Request accepted
$response->toArray(); // ['message' => 'Request accepted']Manage WHOIS contact profiles via $hostinger->domains()->whois().
Retrieves a list of WHOIS contact profiles. Can be filtered by TLD.
Doc: API Reference
// Get all profiles
$profiles = $hostinger->domains()->whois()->list();
// Get profiles for '.com' TLD
$comProfiles = $hostinger->domains()->whois()->list(['tld' => 'com']);
foreach ($profiles as $profile) {
$profile->id; // 746263
$profile->tld; // com
$profile->country; // NL
$profile->entity_type; // individual
$profile->whois_details; // ['first_name' => 'John', ...]
$profile->tld_details; // null or array
$profile->created_at->format('Y-m-d H:i:s'); // 2025-02-27 11:54:22
$profile->updated_at->format('Y-m-d H:i:s'); // 2025-03-19 11:54:22
$profile->toArray(); // ['id' => 746263, 'tld' => 'com', ...]
}Creates a new WHOIS contact profile.
Doc: API Reference
$data = [
'tld' => 'com',
'entity_type' => 'individual', // or 'organization'
'country' => 'US', // ISO 3166 2-letter code
'whois_details' => [
'first_name' => 'Jane',
'last_name' => 'Doe',
'email' => '[email protected]',
'phone' => '+1.1234567890',
'address1' => '123 Main St',
'city' => 'Anytown',
'state' => 'CA',
'zip' => '90210',
// ...
],
'tld_details' => [], // optional
];
$newProfile = $hostinger->domains()->whois()->create($data);
$newProfile->id; // 746264
$newProfile->tld; // com
$newProfile->country; // US
$newProfile->entity_type; // individual
$newProfile->whois_details; // ['first_name' => 'Jane', ...]
$newProfile->tld_details; // []
$newProfile->created_at->format('Y-m-d H:i:s'); // 2025-04-01 10:00:00
$newProfile->updated_at->format('Y-m-d H:i:s'); // 2025-04-01 10:00:00
$newProfile->toArray();Retrieves details for a specific WHOIS profile.
Doc: API Reference
$whoisId = 746263;
$profile = $hostinger->domains()->whois()->get($whoisId);
$profile->id; // 746263
$profile->tld; // com
$profile->country; // NL
$profile->entity_type; // individual
$profile->whois_details; // ['first_name' => 'John', ...]
$profile->tld_details; // null
$profile->created_at->format('Y-m-d H:i:s'); // 2025-02-27 11:54:22
$profile->updated_at->format('Y-m-d H:i:s'); // 2025-03-19 11:54:22
$profile->toArray();Deletes a WHOIS contact profile.
Doc: API Reference
$whoisId = 746263;
$response = $hostinger->domains()->whois()->delete($whoisId);
$response->message; // Request accepted
$response->toArray(); // ['message' => 'Request accepted']Retrieves a list of domains currently using a specific WHOIS profile.
Doc: API Reference
$whoisId = 746263;
$usage = $hostinger->domains()->whois()->getUsage($whoisId);
$usage->domains; // ['mydomain1.tld', 'mydomain2.tld']
$usage->toArray(); // ['mydomain1.tld', 'mydomain2.tld']Access DNS features via $hostinger->dns().
Manage DNS snapshots via $hostinger->dns()->snapshots().
Retrieves a specific DNS snapshot with its content.
Doc: API Reference
$domainName = "mydomain.tld";
$snapshotId = 53513053;
$snapshot = $hostinger->dns()->snapshots()->get($domainName, $snapshotId);
$snapshot->id; // 53513053
$snapshot->reason; // Zone records update request
$snapshot->created_at->format('Y-m-d H:i:s'); // 2025-02-27 11:54:22
foreach ($snapshot->snapshot as $recordGroup) {
$recordGroup->name; // www
$recordGroup->type; // A
$recordGroup->ttl; // 14400
foreach ($recordGroup->records as $recordValue) {
$recordValue->content; // mydomain.tld.
$recordValue->is_disabled; // false
}
}
$snapshot->toArray(); // ['id' => 53513053, 'reason' => '...', 'snapshot' => [[...], ...], 'created_at' => ...]Restores a domain's DNS zone to the state captured in a selected snapshot.
Doc: API Reference
$domainName = "mydomain.tld";
$snapshotId = 53513053;
$response = $hostinger->dns()->snapshots()->restore($domainName, $snapshotId);
$response->message; // Request accepted
$response->toArray(); // ['message' => 'Request accepted']Retrieves a list of DNS snapshots for a specific domain.
Doc: API Reference
$domainName = "mydomain.tld";
$snapshots = $hostinger->dns()->snapshots()->list($domainName);
foreach ($snapshots as $snapshot) {
$snapshot->id; // 5341
$snapshot->reason; // Zone records update request
$snapshot->created_at->format('Y-m-d H:i:s'); // 2025-02-27 11:54:22
$snapshot->toArray(); // ['id' => 5341, 'reason' => '...', 'created_at' => ...]
}Manage DNS zones and records via $hostinger->dns()->zones().
Retrieves all DNS records for a specific domain.
Doc: API Reference
$domainName = "mydomain.tld";
$recordGroups = $hostinger->dns()->zones()->getRecords($domainName);
foreach ($recordGroups as $group) {
$group->name; // www
$group->type; // A
$group->ttl; // 14400
foreach ($group->records as $recordValue) {
$recordValue->content; // mydomain.tld.
$recordValue->is_disabled; // false
$recordValue->toArray(); // ['content' => '...', 'is_disabled' => false]
}
$group->toArray(); // ['name' => 'www', 'records' => [[...], ...], 'ttl' => 14400, 'type' => 'A']
}Updates DNS records for the selected domain. Using overwrite = true (default) replaces records; otherwise, appends or updates TTLs.
Doc: API Reference
$domainName = "mydomain.tld";
$data = [
'overwrite' => true, // Optional, default: true
'zone' => [
[
'name' => 'www', // Use '@' for root domain
'records' => [['content' => '192.0.2.1']], // Array of record values
'ttl' => 3600, // Optional, default TTL applies if omitted
'type' => 'A', // A, AAAA, CNAME, ALIAS, MX, TXT, NS, SOA, SRV, CAA
],
[
'name' => 'www',
'records' => [['content' => 'example.com.']],
'type' => 'CNAME',
],
],
];
$response = $hostinger->dns()->zones()->update($domainName, $data);
$response->message; // Request accepted
$response->toArray(); // ['message' => 'Request accepted']Deletes specific DNS records based on name and type filters.
Doc: API Reference
$domainName = "mydomain.tld";
$data = [
'filters' => [
['name' => '@', 'type' => 'A'], // Delete all A records for the root domain
['name' => 'www', 'type' => 'CNAME'], // Delete www CNAME record
],
];
$response = $hostinger->dns()->zones()->delete($domainName, $data);
$response->message; // Request accepted
$response->toArray(); // ['message' => 'Request accepted']Validates DNS records before attempting an update. Throws a ValidationException if invalid.
Doc: API Reference
$domainName = "mydomain.tld";
$data = [
'zone' => [
[
'name' => 'valid',
'records' => [['content' => '192.0.2.10']],
'type' => 'A',
]
],
];
try {
$response = $hostinger->dns()->zones()->validate($domainName, $data);
$response->message;
$response->toArray(); // ['message' => '...']
} catch (\DerrickOb\HostingerApi\Exceptions\ValidationException $e) {
// Handle validation failure
echo "Validation failed: " . $e->getMessage() . "\n";
print_r($e->getErrors());
}Resets the DNS zone for a domain to the default Hostinger records.
Doc: API Reference
$domainName = "mydomain.tld";
// Reset with defaults (sync=true, reset_email_records=true)
$response = $hostinger->dns()->zones()->reset($domainName);
$response->message; // Request accepted
$response->toArray(); // ['message' => 'Request accepted']
// Reset with options
$data = [
'sync' => true, // Optional
'reset_email_records' => false, // Optional
'whitelisted_record_types' => ['MX', 'TXT'], // Optional. Specify record types not to reset.
];
$response = $hostinger->dns()->zones()->reset($domainName, $data);
$response->message; // Request accepted
$response->toArray(); // ['message' => 'Request accepted']Access billing features via $hostinger->billing().
Access the service catalog via $hostinger->billing()->catalog().
Retrieves a list of catalog items available for order. Prices are in cents. Can be filtered.
Doc: API Reference
// Get all items
$catalogs = $hostinger->billing()->catalog()->list();
// Get only VPS items
$vpsCatalogs = $hostinger->billing()->catalog()->list(['category' => 'VPS']);
// Get only .COM domain items
$comCatalogs = $hostinger->billing()->catalog()->list(['name' => '.COM*']);
foreach ($catalogs as $catalog) {
$catalog->id; // hostingercom-vps-kvm2
$catalog->name; // KVM 2
$catalog->category; // VPS
foreach ($catalog->prices as $price) {
$price->id; // hostingercom-vps-kvm2-usd-1m
$price->name; // KVM 2 (billed every month)
$price->currency; // USD
$price->price; // 1799 (cents)
$price->first_period_price; // 899 (cents)
$price->period; // 1
$price->period_unit->value; // month, year, day, week, none
$price->toArray(); // ['id' => '...', 'name' => '...', 'currency' => 'USD', ...]
}
$catalog->toArray(); // ['id' => '...', 'name' => 'KVM 2', 'category' => 'VPS', 'prices' => [[...], ...]]
}Manage service orders via $hostinger->billing()->orders().
Creates a new service order. Requires a payment method ID and catalog item price IDs. Orders created via API are set for auto-renewal. Prices are in cents.
Doc: API Reference
$data = [
'payment_method_id' => 517244,
'items' => [
[
'item_id' => 'hostingercom-vps-kvm2-usd-1m', // Price ID from Catalog
'quantity' => 1,
],
],
'coupons' => ['Coupon 3'], // optional
];
$order = $hostinger->billing()->orders()->create($data);
$order->id; // 2957086
$order->subscription_id; // Azz353Uhl1xC54pR0
$order->status->value; // completed, pending, processing, failed, etc.
$order->currency; // USD
$order->subtotal; // 899 (cents)
$order->total; // 1088 (cents)
$order->billing_address->first_name; // John
$order->billing_address->last_name; // Doe
$order->billing_address->company; // null
$order->billing_address->address_1; // null
$order->billing_address->address_2; // null
$order->billing_address->city; // null
$order->billing_address->state; // null
$order->billing_address->zip; // null
$order->billing_address->country; // NL
$order->billing_address->phone; // null
$order->billing_address->email; // [email protected]
$order->created_at->format('Y-m-d H:i:s'); // 2025-02-27 11:54:22
$order->updated_at->format('Y-m-d H:i:s'); // 2025-02-27 11:54:22
$order->toArray(); // ['id' => 2957086, 'subscription_id' => '...', 'status' => 'completed', 'billing_address' => [...], ...]Manage payment methods via $hostinger->billing()->paymentMethods().
Sets a specific payment method as the default for your account.
Doc: API Reference
$paymentMethodId = 9693613;
$response = $hostinger->billing()->paymentMethods()->setDefault($paymentMethodId);
$response->message; // Request accepted
$response->toArray(); // ['message' => 'Request accepted']Deletes a payment method from your account.
Doc: API Reference
$paymentMethodId = 9693613;
$response = $hostinger->billing()->paymentMethods()->delete($paymentMethodId);
$response->message; // Request accepted
$response->toArray(); // ['message' => 'Request accepted']Retrieves available payment methods linked to your account.
Doc: API Reference
$paymentMethods = $hostinger->billing()->paymentMethods()->list();
foreach ($paymentMethods as $paymentMethod) {
$paymentMethod->id; // 6523
$paymentMethod->name; // Credit Card
$paymentMethod->identifier; // 1234*****6464
$paymentMethod->payment_method->value; // card, paypal, googlepay
$paymentMethod->is_default; // true
$paymentMethod->is_expired; // false
$paymentMethod->is_suspended; // false
$paymentMethod->created_at->format('Y-m-d H:i:s'); // 2025-02-27 11:54:22
$paymentMethod->expires_at?->format('Y-m-d H:i:s'); // 2028-03-31 00:00:00
$paymentMethod->toArray(); // ['id' => 6523, 'name' => 'Credit Card', 'identifier' => '...', 'payment_method' => 'card', ...]
}Manage service subscriptions via $hostinger->billing()->subscriptions().
Cancels a subscription and stops further billing.
Doc: API Reference
$subscriptionId = "Cxy353Uhl1xC54pG6";
// Cancel immediately with a reason
$data = [
'reason_code' => 'other',
'cancel_option' => 'immediately',
];
$response = $hostinger->billing()->subscriptions()->cancel($subscriptionId, $data);
$response->message; // Request accepted
$response->toArray(); // ['message' => 'Request accepted']
// Cancel at the end of the term (default behavior if $data is empty or omitted)
$response = $hostinger->billing()->subscriptions()->cancel($subscriptionId);
$response->message; // Request accepted
$response->toArray(); // ['message' => 'Request accepted']Retrieves all subscriptions associated with your account. Prices are in cents.
Doc: API Reference
$subscriptions = $hostinger->billing()->subscriptions()->list();
foreach ($subscriptions as $subscription) {
$subscription->id; // Azz36nUfKX1S1MSF
$subscription->name; // KVM 1
$subscription->status->value; // active, paused, cancelled, not_renewing, transferred, in_trial, future
$subscription->billing_period; // 1
$subscription->billing_period_unit->value; // day, week, month, year, none
$subscription->currency_code; // USD
$subscription->total_price; // 1799 (cents)
$subscription->renewal_price; // 1799 (cents)
$subscription->is_auto_renewed; // true
$subscription->created_at->format('Y-m-d H:i:s'); // 2025-02-27 11:54:22
$subscription->expires_at?->format('Y-m-d H:i:s'); // 2026-02-27 11:54:22
$subscription->next_billing_at?->format('Y-m-d H:i:s'); // 2025-03-27 11:54:22
$subscription->toArray(); // ['id' => '...', 'name' => 'KVM 1', 'status' => 'active', 'is_auto_renewed' => true, ...]
}Access Virtual Private Server features via $hostinger->vps().
View VM action history via $hostinger->vps()->actions().
Retrieves details for a specific action performed on a VM.
Doc: API Reference
$virtualMachineId = 1268054;
$actionId = 8123712;
$action = $hostinger->vps()->actions()->get($virtualMachineId, $actionId);
$action->id; // 8123712
$action->name; // action_name (e.g., start, stop, create_snapshot)
$action->state->value; // success, error, delayed, sent, created
$action->created_at->format('Y-m-d H:i:s'); // 2025-02-27 11:54:00
$action->updated_at->format('Y-m-d H:i:s'); // 2025-02-27 11:58:00
$action->toArray(); // ['id' => 8123712, 'name' => 'action_name', 'state' => 'success', ...]Retrieves a paginated list of actions performed on a specific VM.
Doc: API Reference
$virtualMachineId = 1268054;
$actionsPage = $hostinger->vps()->actions()->list($virtualMachineId, ['page' => 1]);
// Access pagination metadata
$actionsPage->getCurrentPage(); // 1
$actionsPage->getPerPage(); // 15
$actionsPage->getTotal(); // 100
foreach ($actionsPage->getData() as $action) {
$action->id; // 8123712
$action->name; // action_name
$action->state->value; // success
$action->created_at->format('Y-m-d H:i:s'); // 2025-02-27 11:54:00
$action->updated_at->format('Y-m-d H:i:s'); // 2025-02-27 11:58:00
$action->toArray(); // ['id' => 8123712, 'name' => 'action_name', 'state' => 'success', ...]
}
$actionsPage->toArray(); // ['data' => [[...], ...], 'meta' => ['current_page' => 1, ...]]Manage VM backups via $hostinger->vps()->backups().
Deletes a specific backup.
Doc: API Reference
$virtualMachineId = 1268054;
$backupId = 8676502;
$response = $hostinger->vps()->backups()->delete($virtualMachineId, $backupId);
$response->message; // Request accepted
$response->toArray(); // ['message' => 'Request accepted']Retrieves a paginated list of backups for a specific virtual machine.
Doc: API Reference
$virtualMachineId = 1268054;
$backupsPage = $hostinger->vps()->backups()->list($virtualMachineId, ['page' => 1]);
// Access pagination metadata
$backupsPage->getCurrentPage(); // 1
$backupsPage->getPerPage(); // 15
$backupsPage->getTotal(); // 100
foreach ($backupsPage->getData() as $backup) {
$backup->id; // 325
$backup->location; // nl-srv-openvzbackups
$backup->created_at->format('Y-m-d H:i:s'); // 2025-02-27 11:54:22
$backup->toArray(); // ['id' => 325, 'location' => 'nl-srv-openvzbackups', 'created_at' => ...]
}
$backupsPage->toArray(); // ['data' => [[...], ...], 'meta' => ['current_page' => 1, ...]]Restores a VM to the state of a specific backup. Warning: Overwrites current VM data!
Doc: API Reference
$virtualMachineId = 1268054;
$backupId = 8676502;
$action = $hostinger->vps()->backups()->restore($virtualMachineId, $backupId);
$action->id; // 8123712
$action->name; // restore_backup
$action->state->value; // success
$action->created_at->format('Y-m-d H:i:s'); // 2025-02-27 11:54:00
$action->updated_at->format('Y-m-d H:i:s'); // 2025-02-27 11:58:00
$action->toArray(); // ['id' => 8123712, 'name' => 'restore_backup', 'state' => 'success', ...]Access data center information via $hostinger->vps()->dataCenters().
Retrieves a list of all available Hostinger data centers where VPS can be deployed.
Doc: API Reference
$dataCenters = $hostinger->vps()->dataCenters()->list();
foreach ($dataCenters as $dataCenter) {
$dataCenter->id; // 29
$dataCenter->name; // phx
$dataCenter->location; // us
$dataCenter->city; // Phoenix
$dataCenter->continent; // North America
$dataCenter->toArray(); // ['id' => 29, 'name' => 'phx', 'location' => 'us', 'city' => 'Phoenix', 'continent' => 'North America']
}Manage reverse DNS (PTR) records via $hostinger->vps()->ptrRecords().
Creates or updates the PTR (reverse DNS) record for a VM's primary IP, pointing to the VM's hostname.
Doc: API Reference
$virtualMachineId = 1268054;
$action = $hostinger->vps()->ptrRecords()->create($virtualMachineId);
$action->id; // 8123728
$action->name; // create_ptr_record
$action->state->value; // success
$action->created_at->format('Y-m-d H:i:s'); // 2025-02-27 11:54:00
$action->updated_at->format('Y-m-d H:i:s'); // 2025-02-27 11:58:00
$action->toArray(); // ['id' => 8123728, 'name' => 'create_ptr_record', 'state' => 'success', ...]Deletes the PTR record for a VM's primary IP.
Doc: API Reference
$virtualMachineId = 1268054;
$action = $hostinger->vps()->ptrRecords()->delete($virtualMachineId);
$action->id; // 8123729
$action->name; // delete_ptr_record
$action->state->value; // success
$action->created_at->format('Y-m-d H:i:s'); // 2025-02-27 11:54:00
$action->updated_at->format('Y-m-d H:i:s'); // 2025-02-27 11:58:00
$action->toArray(); // ['id' => 8123729, 'name' => 'delete_ptr_record', 'state' => 'success', ...]Manage network firewalls via $hostinger->vps()->firewalls(). Access requires at least one VPS.
Activates a firewall for a specific VM. Only one firewall can be active per VM.
Doc: API Reference
$firewallId = 9449049;
$virtualMachineId = 1268054;
$action = $hostinger->vps()->firewalls()->activate($firewallId, $virtualMachineId);
$action->id; // 8123715
$action->name; // activate_firewall
$action->state->value; // sent
$action->created_at->format('Y-m-d H:i:s'); // 2025-02-27 11:54:00
$action->updated_at->format('Y-m-d H:i:s'); // 2025-02-27 11:58:00
$action->toArray(); // ['id' => 8123715, 'name' => 'activate_firewall', 'state' => 'sent', ...]Deactivates the currently active firewall for a specific VM.
Doc: API Reference
$firewallId = 9449049;
$virtualMachineId = 1268054;
$action = $hostinger->vps()->firewalls()->deactivate($firewallId, $virtualMachineId);
$action->id; // 8123716
$action->name; // deactivate_firewall
$action->state->value; // success
$action->created_at->format('Y-m-d H:i:s'); // 2025-02-27 11:54:00
$action->updated_at->format('Y-m-d H:i:s'); // 2025-02-27 11:58:00
$action->toArray(); // ['id' => 8123716, 'name' => 'deactivate_firewall', 'state' => 'success', ...]Retrieves details for a specific firewall, including its rules.
Doc: API Reference
$firewallId = 9449049;
$firewall = $hostinger->vps()->firewalls()->get($firewallId);
$firewall->id; // 65224
$firewall->name; // HTTP and SSH only
$firewall->is_synced; // false
$firewall->created_at->format('Y-m-d H:i:s'); // 2021-09-01 12:00:00
$firewall->updated_at->format('Y-m-d H:i:s'); // 2021-09-01 12:00:00
foreach ($firewall->rules as $rule) {
$rule->id; // 24541
$rule->action->value; // accept, drop
$rule->protocol->value; // TCP, UDP, ICMP, ANY, SSH, HTTP, HTTPS, etc.
$rule->port; // e.g., "443", "1024:2048"
$rule->source->value; // any, custom
$rule->source_detail; // e.g., "any", "192.168.1.1", "10.0.0.0/8"
$rule->toArray(); // ['id' => 24541, 'action' => 'accept', 'protocol' => 'TCP', ...]
}
$firewall->toArray(); // ['id' => 65224, 'name' => '...', 'is_synced' => false, 'rules' => [...], ...]Deletes a firewall. Any VMs using it will have the firewall deactivated.
Doc: API Reference
$firewallId = 9449049;
$response = $hostinger->vps()->firewalls()->delete($firewallId);
$response->message; // Request accepted
$response->toArray(); // ['message' => 'Request accepted']Retrieves a paginated list of all firewalls available in your account.
Doc: API Reference
$firewallsPage = $hostinger->vps()->firewalls()->list(['page' => 1]);
// Access pagination metadata
$firewallsPage->getCurrentPage(); // 1
$firewallsPage->getPerPage(); // 15
$firewallsPage->getTotal(); // 100
foreach ($firewallsPage->getData() as $firewall) {
$firewall->id; // 65224
$firewall->name; // HTTP and SSH only
$firewall->is_synced; // false
$firewall->created_at->format('Y-m-d H:i:s'); // 2021-09-01 12:00:00
$firewall->updated_at->format('Y-m-d H:i:s'); // 2021-09-01 12:00:00
foreach ($firewall->rules as $rule) {
$rule->id; // 24541
$rule->action->value; // accept
$rule->protocol->value; // TCP
$rule->port; // 1024:2048
$rule->source->value; // any
$rule->source_detail; // any
$rule->toArray(); // ['id' => 24541, 'action' => 'accept', 'protocol' => 'TCP', ...]
}
$firewall->toArray(); // ['id' => 65224, 'name' => '...', 'is_synced' => false, 'rules' => [[...], ...], ...]
}
$firewallsPage->toArray(); // ['data' => [[...], ...], 'meta' => ['current_page' => 1, ...]]Creates a new, empty firewall group.
Doc: API Reference
$data = [
'name' => 'My New Firewall',
];
$firewall = $hostinger->vps()->firewalls()->create($data);
$firewall->id; // 65225
$firewall->name; // My New Firewall
$firewall->is_synced; // true (initially synced as it's not attached)
$firewall->rules; // [] (empty array)
$firewall->created_at->format('Y-m-d H:i:s'); // 2021-09-01 12:00:00
$firewall->updated_at->format('Y-m-d H:i:s'); // 2021-09-01 12:00:00
$firewall->toArray(); // ['id' => 65225, 'name' => 'My New Firewall', 'is_synced' => true, 'rules' => [], ...]Updates an existing rule within a firewall. The firewall becomes unsynced if attached to VMs.
Doc: API Reference
$firewallId = 9449049;
$ruleId = 8941182;
$data = [
'protocol' => 'UDP', // TCP, UDP, ICMP, ANY, SSH, HTTP, HTTPS, etc.
'port' => '53', // Port or range "1024:2048"
'source' => 'custom', // any, custom
'source_detail' => '1.1.1.1', // IP, CIDR, or 'any'
'action' => 'accept', // accept, drop
];
$rule = $hostinger->vps()->firewalls()->updateRule($firewallId, $ruleId, $data);
$rule->id; // 8941182
$rule->action->value; // accept
$rule->protocol->value; // UDP
$rule->port; // 53
$rule->source->value; // custom
$rule->source_detail; // 1.1.1.1
$rule->toArray(); // ['id' => 8941182, 'action' => 'accept', 'protocol' => 'UDP', ...]Deletes a specific rule from a firewall. The firewall becomes unsynced if attached to VMs.
Doc: API Reference
$firewallId = 9449049;
$ruleId = 8941182;
$response = $hostinger->vps()->firewalls()->deleteRule($firewallId, $ruleId);
$response->message; // Request accepted
$response->toArray(); // ['message' => 'Request accepted']Adds a new rule to an existing firewall. The firewall becomes unsynced if attached to VMs.
Doc: API Reference
$firewallId = 9449049;
$data = [
'protocol' => 'TCP',
'port' => '443',
'source' => 'any', // 'any' or 'custom'
'source_detail' => 'any', // IP, CIDR, or 'any'
'action' => 'accept', // 'accept' or 'drop'
];
$rule = $hostinger->vps()->firewalls()->createRule($firewallId, $data);
$rule->id; // 8941183
$rule->action->value; // accept
$rule->protocol->value; // TCP
$rule->port; // 443
$rule->source->value; // any
$rule->source_detail; // any
$rule->toArray(); // ['id' => 8941183, 'action' => 'accept', 'protocol' => 'TCP', ...]Syncs firewall rules to an attached VM if the firewall is marked as unsynced (e.g., after rule changes).
Doc: API Reference
$firewallId = 9449049;
$virtualMachineId = 1268054;
$action = $hostinger->vps()->firewalls()->sync($firewallId, $virtualMachineId);
$action->id; // 8123717
$action->name; // sync_firewall
$action->state->value; // success
$action->created_at->format('Y-m-d H:i:s'); // 2025-02-27 11:54:00
$action->updated_at->format('Y-m-d H:i:s'); // 2025-02-27 11:58:00
$action->toArray(); // ['id' => 8123717, 'name' => 'sync_firewall', 'state' => 'success', ...]Manage the Monarx malware scanner via $hostinger->vps()->malwareScanner().
Retrieves the latest Monarx malware scan metrics for a VM.
Doc: API Reference
$virtualMachineId = 1268054;
$metrics = $hostinger->vps()->malwareScanner()->getMetrics($virtualMachineId);
$metrics->records; // 1
$metrics->malicious; // 2
$metrics->compromised; // 3
$metrics->scanned_files; // 193218
$metrics->scan_started_at->format('Y-m-d H:i:s'); // 2025-02-27 11:54:22
$metrics->scan_ended_at?->format('Y-m-d H:i:s'); // 2025-02-27 12:10:00
$metrics->toArray(); // ['records' => 1, 'malicious' => 2, 'compromised' => 3, ...]Installs the Monarx malware scanner on a VM.
Doc: API Reference
$virtualMachineId = 1268054;
$action = $hostinger->vps()->malwareScanner()->install($virtualMachineId);
$action->id; // 8123718
$action->name; // install_monarx
$action->state->value; // success
$action->created_at->format('Y-m-d H:i:s'); // 2025-02-27 11:54:00
$action->updated_at->format('Y-m-d H:i:s'); // 2025-02-27 11:58:00
$action->toArray(); // ['id' => 8123718, 'name' => 'install_monarx', 'state' => 'success', ...]Uninstalls the Monarx malware scanner from a VM.
Doc: API Reference
$virtualMachineId = 1268054;
$action = $hostinger->vps()->malwareScanner()->uninstall($virtualMachineId);
$action->id; // 8123719
$action->name; // uninstall_monarx
$action->state->value; // success
$action->created_at->format('Y-m-d H:i:s'); // 2025-02-27 11:54:00
$action->updated_at->format('Y-m-d H:i:s'); // 2025-02-27 11:58:00
$action->toArray(); // ['id' => 8123719, 'name' => 'uninstall_monarx', 'state' => 'success', ...]Access available OS templates via $hostinger->vps()->templates().
Retrieves details for a specific OS template.
Doc: API Reference
$templateId = 2868928;
$template = $hostinger->vps()->templates()->get($templateId);
$template->id; // 2868928
$template->name; // Ubuntu 20.04 LTS
$template->description; // Ubuntu 20.04 LTS
$template->documentation; // https://docs.ubuntu.com or null
$template->toArray(); // ['id' => 2868928, 'name' => '...', 'description' => '...', 'documentation' => null]Retrieves a list of available OS templates for installing on virtual machines.
Doc: API Reference
$templates = $hostinger->vps()->templates()->list();
foreach ($templates as $template) {
$template->id; // 6523
$template->name; // Ubuntu 20.04 LTS
$template->description; // Ubuntu 20.04 LTS
$template->documentation; // https://docs.ubuntu.com or null
$template->toArray(); // ['id' => 6523, 'name' => 'Ubuntu 20.04 LTS', 'description' => '...', 'documentation' => '...']
}Manage scripts to run after OS installation via $hostinger->vps()->postInstallScripts().
Retrieves details of a specific post-install script.
Doc: API Reference
$postInstallScriptId = 9568314;
$script = $hostinger->vps()->postInstallScripts()->get($postInstallScriptId);
$script->id; // 325
$script->name; // My Setup Script
$script->content; // #!/bin/bash\napt-get update...
$script->created_at->format('Y-m-d H:i:s'); // 2025-02-27 11:54:22
$script->updated_at->format('Y-m-d H:i:s'); // 2025-03-19 11:54:22
$script->toArray(); // ['id' => 325, 'name' => '...', 'content' => '...', 'created_at' => ..., 'updated_at' => ...]Updates the name and/or content of an existing post-install script.
Doc: API Reference
$postInstallScriptId = 9568314;
$data = [
'name' => 'Updated Setup Script',
'content' => "#!/bin/bash\napt-get update && apt-get upgrade -y",
];
$script = $hostinger->vps()->postInstallScripts()->update($postInstallScriptId, $data);
$script->id; // 9568314
$script->name; // Updated Setup Script
$script->content; // "#!/bin/bash\napt-get update && apt-get upgrade -y"
$script->created_at->format('Y-m-d H:i:s'); // 2025-02-27 11:54:22
$script->updated_at->format('Y-m-d H:i:s'); // 2025-04-01 10:30:00 (updated time)
$script->toArray(); // ['id' => 9568314, 'name' => 'Updated Setup Script', ...]Deletes a post-install script from your account.
Doc: API Reference
$postInstallScriptId = 9568314;
$response = $hostinger->vps()->postInstallScripts()->delete($postInstallScriptId);
$response->message; // Request accepted
$response->toArray(); // ['message' => 'Request accepted']Retrieves a paginated list of post-install scripts associated with your account.
Doc: API Reference
$scriptsPage = $hostinger->vps()->postInstallScripts()->list(['page' => 1]);
// Access pagination metadata
$scriptsPage->getCurrentPage(); // 1
$scriptsPage->getPerPage(); // 15
$scriptsPage->getTotal(); // 100
foreach ($scriptsPage->getData() as $script) {
$script->id; // 325
$script->name; // "My Setup Script"
$script->content; // "#!/bin/bash\napt-get update\napt-get install -y nginx"
$script->created_at->format('Y-m-d H:i:s'); // 2025-02-27 11:54:22
$script->updated_at->format('Y-m-d H:i:s'); // 2025-03-19 11:54:22
$script->toArray(); // ['id' => 325, 'name' => 'My Setup Script', 'content' => '...', ...]
}
$scriptsPage->toArray(); // ['data' => [[...], ...], 'meta' => ['current_page' => 1, ...]]Creates a new script that can be run after OS installation on a VM. Max size 48KB.
Doc: API Reference
$data = [
'name' => 'Install Docker Script',
'content' => "#!/bin/bash\napt-get update\napt-get install -y docker.io",
];
$script = $hostinger->vps()->postInstallScripts()->create($data);
$script->id; // 326
$script->name; // Install Docker Script
$script->content; // "#!/bin/bash\napt-get update\napt-get install -y docker.io"
$script->created_at->format('Y-m-d H:i:s'); // 2025-04-01 10:00:00
$script->updated_at->format('Y-m-d H:i:s'); // 2025-04-01 10:00:00
$script->toArray(); // ['id' => 326, 'name' => 'Install Docker Script', 'content' => '...', ...]Manage SSH public keys via $hostinger->vps()->publicKeys().
Attaches existing public keys from your account to a specific VM.
Doc: API Reference
$virtualMachineId = 1268054;
$data = [
'ids' => [18232, 10230230], // Array of Public Key IDs
];
$action = $hostinger->vps()->publicKeys()->attach($virtualMachineId, $data);
$action->id; // 8123720
$action->name; // attach_public_key
$action->state->value; // success
$action->created_at->format('Y-m-d H:i:s'); // 2025-02-27 11:54:00
$action->updated_at->format('Y-m-d H:i:s'); // 2025-02-27 11:58:00
$action->toArray(); // ['id' => 8123720, 'name' => 'attach_public_key', 'state' => 'success', ...]Deletes a public key from your account. This does not remove it from VMs it's already attached to.
Doc: API Reference
$publicKeyId = 6672861;
$response = $hostinger->vps()->publicKeys()->delete($publicKeyId);
$response->message; // Request accepted
$response->toArray(); // ['message' => 'Request accepted']Retrieves a paginated list of SSH public keys associated with your account.
Doc: API Reference
$keysPage = $hostinger->vps()->publicKeys()->list(['page' => 1]);
// Access pagination metadata
$keysPage->getCurrentPage(); // 1
$keysPage->getPerPage(); // 15
$keysPage->getTotal(); // 100
foreach ($keysPage->getData() as $key) {
$key->id; // 325
$key->name; // My public key
$key->key; // ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQD...
$key->toArray(); // ['id' => 325, 'name' => 'My public key', 'key' => 'ssh-rsa...']
}
$keysPage->toArray(); // ['data' => [[...], ...], 'meta' => ['current_page' => 1, ...]]Adds a new SSH public key to your account, which can then be attached to VMs.
Doc: API Reference
$data = [
'name' => 'My Laptop Key',
'key' => 'ssh-rsa AAAAB3NzaC1yc2EAAA...',
];
$publicKey = $hostinger->vps()->publicKeys()->create($data);
$publicKey->id; // 326
$publicKey->name; // My Laptop Key
$publicKey->key; // ssh-rsa AAAAB3NzaC1yc2EAAA...
$publicKey->toArray(); // ['id' => 326, 'name' => 'My Laptop Key', 'key' => 'ssh-rsa...']Manage VM recovery mode via $hostinger->vps()->recovery().
Boots a VM into a temporary recovery environment with the specified root password. The original disk is mounted at /mnt.
Doc: API Reference
$virtualMachineId = 1268054;
$data = [
'root_password' => 'TemporarySecurePassword123!',
];
$action = $hostinger->vps()->recovery()->start($virtualMachineId, $data);
$action->id; // 8123721
$action->name; // start_recovery
$action->state->value; // success
$action->created_at->format('Y-m-d H:i:s'); // 2025-02-27 11:54:00
$action->updated_at->format('Y-m-d H:i:s'); // 2025-02-27 11:58:00
$action->toArray(); // ['id' => 8123721, 'name' => 'start_recovery', 'state' => 'success', ...]Boots the VM back into its normal operating system from recovery mode.
Doc: API Reference
$virtualMachineId = 1268054;
$action = $hostinger->vps()->recovery()->stop($virtualMachineId);
$action->id; // 8123722
$action->name; // stop_recovery
$action->state->value; // success
$action->created_at->format('Y-m-d H:i:s'); // 2025-02-27 11:54:00
$action->updated_at->format('Y-m-d H:i:s'); // 2025-02-27 11:58:00
$action->toArray(); // ['id' => 8123722, 'name' => 'stop_recovery', 'state' => 'success', ...]Manage VM snapshots via $hostinger->vps()->snapshots(). Note: Only one snapshot is kept per VM.
Retrieves information about the current snapshot for a VM.
Doc: API Reference
$virtualMachineId = 1268054;
$snapshot = $hostinger->vps()->snapshots()->get($virtualMachineId);
$snapshot->id; // 325
$snapshot->created_at->format('Y-m-d H:i:s'); // 2025-02-27 11:54:22
$snapshot->expires_at->format('Y-m-d H:i:s'); // 2025-03-19 11:54:22
$snapshot->toArray(); // ['id' => 325, 'created_at' => ..., 'expires_at' => ...]Creates a new snapshot of a VM. Warning: Overwrites any existing snapshot for this VM!
Doc: API Reference
$virtualMachineId = 1268054;
$action = $hostinger->vps()->snapshots()->create($virtualMachineId);
$action->id; // 8123732
$action->name; // create_snapshot
$action->state->value; // success
$action->created_at->format('Y-m-d H:i:s'); // 2025-02-27 11:54:00
$action->updated_at->format('Y-m-d H:i:s'); // 2025-02-27 11:58:00
$action->toArray(); // ['id' => 8123732, 'name' => 'create_snapshot', 'state' => 'success', ...]Deletes the existing snapshot for a VM.
Doc: API Reference
$virtualMachineId = 1268054;
$action = $hostinger->vps()->snapshots()->delete($virtualMachineId);
$action->id; // 8123733
$action->name; // delete_snapshot
$action->state->value; // success
$action->created_at->format('Y-m-d H:i:s'); // 2025-02-27 11:54:00
$action->updated_at->format('Y-m-d H:i:s'); // 2025-02-27 11:58:00
$action->toArray(); // ['id' => 8123733, 'name' => 'delete_snapshot', 'state' => 'success', ...]Restores a VM to the state of its existing snapshot. Warning: Overwrites current VM data!
Doc: API Reference
$virtualMachineId = 1268054;
$action = $hostinger->vps()->snapshots()->restore($virtualMachineId);
$action->id; // 8123734
$action->name; // restore_snapshot
$action->state->value; // success
$action->created_at->format('Y-m-d H:i:s'); // 2025-02-27 11:54:00
$action->updated_at->format('Y-m-d H:i:s'); // 2025-02-27 11:58:00
$action->toArray(); // ['id' => 8123734, 'name' => 'restore_snapshot', 'state' => 'success', ...]Manage core VM operations via $hostinger->vps()->virtualMachines().
Retrieves a paginated list of SSH public keys attached to a specific virtual machine.
Doc: API Reference
$virtualMachineId = 1268054;
$keysPage = $hostinger->vps()->virtualMachines()->getAttachedPublicKeys($virtualMachineId, ['page' => 1]);
// Access pagination metadata
$keysPage->getCurrentPage(); // 1
$keysPage->getPerPage(); // 15
$keysPage->getTotal(); // 100
foreach ($keysPage->getData() as $key) {
$key->id; // 325
$key->name; // My public key
$key->key; // ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQD...
$key->toArray(); // ['id' => 325, 'name' => 'My public key', 'key' => 'ssh-rsa...']
}
$keysPage->toArray(); // ['data' => [[...], ...], 'meta' => ['current_page' => 1, ...]]Sets the hostname for a virtual machine. Does not automatically update PTR record.
Doc: API Reference
$virtualMachineId = 1268054;
$newHostname = 'my.new-server.tld';
$action = $hostinger->vps()->virtualMachines()->setHostName($virtualMachineId, $newHostname);
$action->id; // 8123723
$action->name; // set_hostname
$action->state->value; // success
$action->created_at->format('Y-m-d H:i:s'); // 2025-02-27 11:54:00
$action->updated_at->format('Y-m-d H:i:s'); // 2025-02-27 11:58:00
$action->toArray(); // ['id' => 8123723, 'name' => 'set_hostname', 'state' => 'success', ...]Resets the hostname and PTR record to the default value (e.g., srvXXXXX.hstgr.cloud).
Doc: API Reference
$virtualMachineId = 1268054;
$action = $hostinger->vps()->virtualMachines()->resetHostName($virtualMachineId);
$action->id; // 8123724
$action->name; // reset_hostname
$action->state->value; // success
$action->created_at->format('Y-m-d H:i:s'); // 2025-02-27 11:54:00
$action->updated_at->format('Y-m-d H:i:s'); // 2025-02-27 11:58:00
$action->toArray(); // ['id' => 8123724, 'name' => 'reset_hostname', 'state' => 'success', ...]Retrieves detailed information for a specific virtual machine.
Doc: API Reference
$virtualMachineId = 1268054;
$vm = $hostinger->vps()->virtualMachines()->get($virtualMachineId);
$vm->id; // 17923
$vm->firewall_group_id; // null or ID
$vm->subscription_id; // Azz353Uhl1xC54pR0
$vm->plan; // KVM 4
$vm->hostname; // srv17923.hstgr.cloud
$vm->state->value; // running, stopped, creating, initial, error, etc.
$vm->actions_lock->value; // unlocked, locked
$vm->cpus; // 4
$vm->memory; // 8192 (MB)
$vm->disk; // 51200 (MB)
$vm->bandwidth; // 1073741824 (MB)
$vm->ns1; // 1.1.1.1 or null
$vm->ns2; // 8.8.8.8 or null
$vm->created_at->format('Y-m-d H:i:s'); // 2024-09-05 07:25:36
if ($vm->ipv4) {
foreach ($vm->ipv4 as $ip4) {
$ip4->id; // 52347
$ip4->address; // 213.331.273.15
$ip4->ptr; // something.domain.tld
$ip4->toArray(); // ['id' => 52347, 'address' => '...', 'ptr' => '...']
}
}
if ($vm->ipv6) {
foreach ($vm->ipv6 as $ip6) {
$ip6->id; // 52347
$ip6->address; // 2a00:4000:f:eaee::1
$ip6->ptr; // something.domain.tld
$ip6->toArray(); // ['id' => 52347, 'address' => '...', 'ptr' => '...']
}
}
if ($vm->template) {
$vm->template->id; // 6523
$vm->template->name; // Ubuntu 20.04 LTS
$vm->template->description; // Ubuntu 20.04 LTS
$vm->template->documentation; // https://docs.ubuntu.com
$vm->template->toArray(); // ['id' => 6523, 'name' => '...', ...]
}
$vm->toArray(); // ['id' => 17923, 'firewall_group_id' => null, 'hostname' => '...', 'state' => 'running', ...]Retrieves a list of all virtual machines in your account.
Doc: API Reference
$vms = $hostinger->vps()->virtualMachines()->list();
foreach ($vms as $vm) {
$vm->id; // 17923
$vm->firewall_group_id; // null
$vm->subscription_id; // Azz353Uhl1xC54pR0
$vm->plan; // KVM 4
$vm->hostname; // srv17923.hstgr.cloud
$vm->state->value; // running
$vm->actions_lock->value; // unlocked
$vm->cpus; // 4
$vm->memory; // 8192
$vm->disk; // 51200
$vm->bandwidth; // 1073741824
$vm->ns1; // 1.1.1.1
$vm->ns2; // 8.8.8.8
$vm->created_at->format('Y-m-d H:i:s'); // 2024-09-05 07:25:36
if ($vm->ipv4) {
foreach ($vm->ipv4 as $ip4) {
$ip4->id; // 52347
$ip4->address; // 213.331.273.15
$ip4->ptr; // something.domain.tld
$ip4->toArray(); // ['id' => 52347, 'address' => '...', 'ptr' => '...']
}
}
if ($vm->ipv6) {
foreach ($vm->ipv6 as $ip6) {
$ip6->id; // 52347
$ip6->address; // 2a00:4000:f:eaee::1
$ip6->ptr; // something.domain.tld
$ip6->toArray(); // ['id' => 52347, 'address' => '...', 'ptr' => '...']
}
}
if ($vm->template) {
$vm->template->id; // 6523
$vm->template->name; // Ubuntu 20.04 LTS
$vm->template->description; // Ubuntu 20.04 LTS
$vm->template->documentation; // https://docs.ubuntu.com
$vm->template->toArray(); // ['id' => 6523, 'name' => '...', ...]
}
$vm->toArray(); // ['id' => 17923, 'firewall_group_id' => null, 'hostname' => '...', 'state' => 'running', ...]
}Allows you to buy (purchase) and setup a new virtual machine.
If virtual machine setup fails for any reason, login to hPanel and complete the setup manually.
If no payment method is provided, your default payment method will be used automatically.
Doc: API Reference
$data = [
'item_id' => 'hostingercom-vps-kvm2-usd-1m',
'payment_method_id' => 1327362,
'setup' => [
'template_id' => 1130,
'data_center_id' => 19,
'post_install_script_id' => 6324,
'password' => 'MyS3cureP@ssw0rd!',
'hostname' => 'my.server.tld',
'install_monarx' => false,
'enable_backups' => true,
'ns1' => '1.1.1.1',
'ns2' => '1.0.0.1',
'public_key' => [
'name' => 'my-key',
'key' => 'ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC2X...'
]
],
'coupons' => ['VPSPROMO'],
];
$response = $hostinger->vps()->virtualMachines()->purchase($data);
// Access order details
$response->order->id; // 2957087
$response->order->subscription_id; // Azz353Uhl1xC54pR0
$response->order->status->value; // completed
$response->order->currency; // USD
$response->order->subtotal; // 899
$response->order->total; // 1080
$response->order->billing_address->first_name; // John
$response->order->billing_address->last_name; // Doe
$response->order->billing_address->company; // null
$response->order->billing_address->address_1; // null
$response->order->billing_address->address_2; // null
$response->order->billing_address->city; // null
$response->order->billing_address->state; // null
$response->order->billing_address->zip; // null
$response->order->billing_address->country; // NL
$response->order->billing_address->phone; // null
$response->order->billing_address->email; // [email protected]
$response->order->created_at->format('Y-m-d H:i:s'); // 2025-02-27 11:54:22
$response->order->updated_at->format('Y-m-d H:i:s'); // 2025-02-27 11:54:22
// Access virtual machine details
$response->virtual_machine->id; // 1268054
$response->virtual_machine->hostname; // my.server.tld
$response->virtual_machine->state->value; // creating
$response->virtual_machine->plan; // KVM 4
$response->virtual_machine->cpus; // 4
$response->virtual_machine->memory; // 8192
$response->virtual_machine->disk; // 51200Retrieves historical performance metrics (CPU, RAM, Disk, Network, Uptime) for a VM within a specified time range.
Doc: API Reference
$virtualMachineId = 1268054;
$dateFrom = '2025-05-01T00:00:00Z'; // RFC 3339 format
$dateTo = '2025-06-01T00:00:00Z'; // RFC 3339 format
$metrics = $hostinger->vps()->virtualMachines()->getMetrics($virtualMachineId, $dateFrom, $dateTo);
if ($metrics->cpu_usage) {
$metrics->cpu_usage->unit; // %
$metrics->cpu_usage->usage; // {"1742269632": 1.45, ...} (Timestamp => Value)
$metrics->cpu_usage->toArray(); // ['unit' => '%', 'usage' => [...]]
}
if ($metrics->ram_usage) {
$metrics->ram_usage->unit; // bytes
$metrics->ram_usage->usage; // {"1742269632": 554176512, ...}
$metrics->ram_usage->toArray(); // ['unit' => 'bytes', 'usage' => [...]]
}
if ($metrics->disk_space) {
$metrics->disk_space->unit; // "bytes"
$metrics->disk_space->usage; // {"1742269632": 2620018688, ...}
$metrics->disk_space->toArray(); // ['unit' => 'bytes', 'usage' => [...]]
}
if ($metrics->outgoing_traffic) {
$metrics->outgoing_traffic->unit; // "bytes"
$metrics->outgoing_traffic->usage; // {"1742269632": 784800, ...}
$metrics->outgoing_traffic->toArray(); // ['unit' => 'bytes', 'usage' => [...]]
}
if ($metrics->incoming_traffic) {
$metrics->incoming_traffic->unit; // "bytes"
$metrics->incoming_traffic->usage; // {"1742269632": 8978400, ...}
$metrics->incoming_traffic->toArray(); // ['unit' => 'bytes', 'usage' => [...]]
}
if ($metrics->uptime) {
$metrics->uptime->unit; // "milliseconds"
$metrics->uptime->usage; // {"1742269632": 455248, ...}
$metrics->uptime->toArray(); // ['unit' => 'milliseconds', 'usage' => [...]]
}
$metrics->toArray(); // ['cpu_usage' => [...], 'ram_usage' => [...], ...]Sets the DNS resolvers used by the virtual machine.
Doc: API Reference
$virtualMachineId = 1268054;
$data = [
'ns1' => '1.1.1.1', // Primary nameserver IP
'ns2' => '1.0.0.1', // Optional secondary nameserver IP
];
$action = $hostinger->vps()->virtualMachines()->setNameServers($virtualMachineId, $data);
$action->id; // 8123725
$action->name; // set_nameservers
$action->state->value; // success
$action->created_at->format('Y-m-d H:i:s'); // 2025-02-27 11:54:00
$action->updated_at->format('Y-m-d H:i:s'); // 2025-02-27 11:58:00
$action->toArray(); // ['id' => 8123725, 'name' => 'set_nameservers', 'state' => 'success', ...]Sets the password for the control panel (if applicable to the OS template). Requires a strong password.
Doc: API Reference
$virtualMachineId = 1268054;
$newPassword = 'VeryStr0ngP@ssw0rd!';
$action = $hostinger->vps()->virtualMachines()->setPanelPassword($virtualMachineId, $newPassword);
$action->id; // 8123726
$action->name; // set_panel_password
$action->state->value; // success
$action->created_at->format('Y-m-d H:i:s'); // 2025-02-27 11:54:00
$action->updated_at->format('Y-m-d H:i:s'); // 2025-02-27 11:58:00
$action->toArray(); // ['id' => 8123726, 'name' => 'set_panel_password', 'state' => 'success', ...]Reinstalls the OS on a virtual machine. Warning: All data will be lost! Snapshots will be deleted. Requires a strong password if provided.
Doc: API Reference
$virtualMachineId = 1268054;
$data = [
'template_id' => 1130, // ID of the OS template to install
'password' => 'AnotherStr0ngP@ss!', // Optional: If omitted, a random one is generated
'post_install_script_id' => 6324, // Optional: ID of a script to run after install
];
$action = $hostinger->vps()->virtualMachines()->recreate($virtualMachineId, $data);
$action->id; // 8123727
$action->name; // recreate
$action->state->value; // success
$action->created_at->format('Y-m-d H:i:s'); // 2025-04-01 10:00:00
$action->updated_at->format('Y-m-d H:i:s'); // 2025-04-01 10:05:00
$action->toArray(); // ['id' => 8123727, 'name' => 'recreate', 'state' => 'success', ...]Restarts a virtual machine (equivalent to stop then start). Starts a stopped VM.
Doc: API Reference
$virtualMachineId = 1268054;
$action = $hostinger->vps()->virtualMachines()->restart($virtualMachineId);
$action->id; // 8123712
$action->name; // restart
$action->state->value; // success
$action->created_at->format('Y-m-d H:i:s'); // 2025-02-27 11:54:00
$action->updated_at->format('Y-m-d H:i:s'); // 2025-02-27 11:58:00
$action->toArray(); // ['id' => 8123712, 'name' => 'restart', 'state' => 'success', ...]Sets the root password for the virtual machine. Requires a strong password.
Doc: API Reference
$virtualMachineId = 1268054;
$newPassword = 'EvenM0reSecur3P@ss!';
$action = $hostinger->vps()->virtualMachines()->setRootPassword($virtualMachineId, $newPassword);
$action->id; // 8123728
$action->name; // set_root_password
$action->state->value; // success
$action->created_at->format('Y-m-d H:i:s'); // 2025-02-27 11:54:00
$action->updated_at->format('Y-m-d H:i:s'); // 2025-02-27 11:58:00
$action->toArray(); // ['id' => 8123728, 'name' => 'set_root_password', 'state' => 'success', ...]Sets up a newly purchased VPS (in initial state). Requires OS template and data center.
Doc: API Reference
$virtualMachineId = 1268054;
$data = [
'template_id' => 1130,
'data_center_id' => 19,
'password' => 'MyS3cureP@ssw0rd!', // Optional: Strong password, random if omitted
'hostname' => 'my.server.tld', // Optional: Override default hostname
'install_monarx' => false, // Optional: Install malware scanner (default: false)
'enable_backups' => true, // Optional: Enable weekly backups (default: true)
'ns1' => '1.1.1.1', // Optional: Primary DNS resolver
'ns2' => '1.0.0.1', // Optional: Secondary DNS resolver
'post_install_script_id' => 6324, // Optional: Script to run after setup
'public_key' => [ // Optional: Add and attach a new SSH key
'name' => 'my-setup-key',
'key' => 'ssh-rsa AAAAB3NzaC1yc2EAAA...',
]
];
$vm = $hostinger->vps()->virtualMachines()->setup($virtualMachineId, $data);
$vm->id; // 1268054
$vm->firewall_group_id; // null
$vm->subscription_id; // Azz353Uhl1xC54pR0
$vm->plan; // KVM 4
$vm->hostname; // my.server.tld
$vm->state->value; // creating
$vm->actions_lock->value; // unlocked
$vm->cpus; // 4
$vm->memory; // 8192
$vm->disk; // 51200
$vm->bandwidth; // 1073741824
$vm->ns1; // 1.1.1.1
$vm->ns2; // 1.0.0.1
$vm->created_at->format('Y-m-d H:i:s'); // 2024-09-05 07:25:36
if ($vm->ipv4) {
foreach ($vm->ipv4 as $ipv4) {
$ipv4->id; // 52347
$ipv4->address; // 213.331.273.15
$ipv4->ptr; // something.domain.tld
$ipv4->toArray(); // ['id' => 52347, 'address' => '...', 'ptr' => '...']
}
}
if ($vm->ipv6) {
foreach ($vm->ipv6 as $ipv6) {
$ipv6->id; // 52347
$ipv6->address; // 2a00:4000:f:eaee::1
$ipv6->ptr; // something.domain.tld
$ipv6->toArray(); // ['id' => 52347, 'address' => '...', 'ptr' => '...']
}
}
if ($vm->template) {
$vm->template->id; // 6523
$vm->template->name; // Ubuntu 20.04 LTS
$vm->template->description; // Ubuntu 20.04 LTS
$vm->template->documentation; // https://docs.ubuntu.com
$vm->template->toArray(); // ['id' => 6523, 'name' => '...', ...]
}
$vm->toArray(); // ['id' => 1268054, 'firewall_group_id' => null, 'hostname' => 'my.server.tld', 'state' => 'creating', ...]Starts a stopped virtual machine.
Doc: API Reference
$virtualMachineId = 1268054;
$action = $hostinger->vps()->virtualMachines()->start($virtualMachineId);
$action->id; // 8123729
$action->name; // start
$action->state->value; // success
$action->created_at->format('Y-m-d H:i:s'); // 2025-02-27 11:54:00
$action->updated_at->format('Y-m-d H:i:s'); // 2025-02-27 11:58:00
$action->toArray(); // ['id' => 8123729, 'name' => 'start', 'state' => 'success', ...]Stops a running virtual machine.
Doc: API Reference
$virtualMachineId = 1268054;
$action = $hostinger->vps()->virtualMachines()->stop($virtualMachineId);
$action->id; // 8123730
$action->name; // stop
$action->state->value; // success
$action->created_at->format('Y-m-d H:i:s'); // 2025-02-27 11:54:00
$action->updated_at->format('Y-m-d H:i:s'); // 2025-02-27 11:58:00
$action->toArray(); // ['id' => 8123730, 'name' => 'stop', 'state' => 'success', ...]Run the test suite using Pest:
composer testContributions are welcome! Please see CONTRIBUTING.md for details on how to contribute, including coding standards, testing procedures, and guidelines for adding new features.
The MIT License (MIT). Please see the License File for more information.
