📡 API v1 Reference
Programmatically manage your Hostingowy VPS instances — provision servers, query status, and automate your infrastructure.
https://hostingowy.com/api/v1Content-Type:
application/jsonAuthentication: Bearer token in the
Authorization header
The Hostingowy API follows RESTful conventions. All requests must be authenticated using a scoped API key. Responses are always JSON with a consistent envelope:
{
"success": true,
"data": { /* response payload */ },
"meta": { /* pagination, filters, etc. */ }
}
Error responses use the same envelope with success: false and an error field:
{
"success": false,
"error": "Description of what went wrong",
"docs": "https://hostingowy.com/docs/api"
}
Authentication
All API requests require a valid API key passed as a Bearer token in the Authorization header.
curl -H "Authorization: Bearer hkey_your_api_key_here" \
https://hostingowy.com/api/v1/me
Getting an API Key
Generate API keys from your customer dashboard. Each key can be given a label and scoped to specific permissions.
Scopes
API keys are scoped to limit what they can do. Available scopes:
| Scope | Permissions |
|---|---|
servers:read | List servers, get server details, read metadata |
servers:write | Create and manage servers (includes read) |
admin | Full access (all scopes) |
You can manage (create, list, revoke) your API keys programmatically via the key management API.
Rate Limiting
API requests are rate-limited per API key to ensure fair usage for all customers.
| Limit | Window | Scope |
|---|---|---|
| 1,000 requests | 1 hour (sliding) | Per API key |
When you exceed the rate limit, the API returns HTTP 429 Too Many Requests:
{
"success": false,
"error": "Rate limit exceeded. Max 1000 requests/hour per API key.",
"retryAfter": "1 hour"
}
You can check your current usage via the GET /api/v1/me endpoint, which includes rate limit counters. If you need higher limits, contact support.
Error Codes
| Status | Error | Description |
|---|---|---|
| 400 | Bad Request |
Missing or invalid request parameters. Check the error field for details. |
| 401 | Unauthorized |
Missing or invalid API key. Check your Authorization header. |
| 403 | Forbidden |
Your API key lacks the required scope for this endpoint. |
| 404 | Not Found |
The requested resource does not exist. |
| 429 | Too Many Requests |
Rate limit exceeded. Wait before retrying. |
| 500 | Internal Server Error |
Something went wrong on our end. Retry or contact support. |
Endpoints
Returns metadata about the authenticated API key, including its label, scopes, creation date, and current rate limit usage.
Response 200 OK
{
"success": true,
"data": {
"keyId": "a73c73ab-187f-49c6-9117-defaafad3738",
"label": "My CLI Tool",
"scopes": ["servers:read", "servers:write"],
"createdAt": "2026-07-20T15:20:47.778Z",
"lastUsedAt": "2026-07-20T15:30:00.000Z",
"rateLimit": {
"used": 42,
"limit": 1000,
"windowResetAt": "2026-07-20T16:20:47.778Z"
}
}
}
cURL Example
curl -H "Authorization: Bearer hkey_your_api_key" \
https://hostingowy.com/api/v1/me
Returns a list of all VPS instances belonging to your account. Supports optional filtering by status and region.
Query Parameters
active, suspended, provisioning
lon1, man1
Response 200 OK
{
"success": true,
"data": [
{
"id": "c13fe9bb-8582-4b6b-a43e-e2bbf9806123",
"name": "my-web-server",
"status": "active",
"ipv4": "10.0.0.101",
"ipv6": null,
"region": "lon1",
"plan": "vps-2",
"vcpu": 2,
"ram": 2048,
"storage": 50,
"bandwidth": 2000,
"os": "ubuntu-22.04",
"createdAt": "2026-07-15T10:10:00Z",
"updatedAt": "2026-07-15T10:15:00Z"
}
],
"meta": {
"total": 1,
"filters": { "status": null, "region": null }
}
}
cURL Example
# List all servers
curl -H "Authorization: Bearer hkey_your_api_key" \
https://hostingowy.com/api/v1/servers
# Filter by status
curl -H "Authorization: Bearer hkey_your_api_key" \
"https://hostingowy.com/api/v1/servers?status=active"
Provision a new VPS instance. The server is created in a provisioning state and typically becomes active within 2–5 minutes.
Request Body
vps-1, vps-2, vps-4, vps-8
lon1 (London), man1 (Manchester)
ubuntu-22.04, ubuntu-24.04, debian-12, centos-9, fedora-38, rocky-9
Example Request
curl -X POST \
-H "Authorization: Bearer hkey_your_api_key" \
-H "Content-Type: application/json" \
-d '{"plan":"vps-2","region":"lon1","os":"ubuntu-22.04","hostname":"my-app-server"}' \
https://hostingowy.com/api/v1/servers
Response 201 Created
{
"success": true,
"data": {
"id": "b32bb468-c38c-42cb-9a16-0372b01279d1",
"name": "my-app-server",
"status": "provisioning",
"plan": "vps-2",
"region": "lon1",
"os": "ubuntu-22.04",
"vcpu": 2,
"ram": 2048,
"storage": 50,
"bandwidth": 2000,
"createdAt": "2026-07-20T15:30:00.000Z"
},
"message": "Your vps-2 VPS is being provisioned in lon1. It will be ready in 2–5 minutes."
}
Returns detailed information about a specific server, including its current status, IP addresses, specs, and provisioning timestamps.
Path Parameters
Response 200 OK
{
"success": true,
"data": {
"id": "c13fe9bb-8582-4b6b-a43e-e2bbf9806123",
"name": "my-web-server",
"status": "active",
"ipv4": "10.0.0.101",
"ipv6": null,
"region": "lon1",
"plan": "vps-2",
"vcpu": 2,
"ram": 2048,
"storage": 50,
"bandwidth": 2000,
"bandwidthUsed": 350,
"os": "ubuntu-22.04",
"createdAt": "2026-07-15T10:10:00Z",
"updatedAt": "2026-07-15T10:15:00Z",
"provisionStartedAt": "2026-07-15T10:10:05Z"
}
}
cURL Example
curl -H "Authorization: Bearer hkey_your_api_key" \
https://hostingowy.com/api/v1/servers/c13fe9bb-8582-4b6b-a43e-e2bbf9806123
Response 404 Not Found
{
"success": false,
"error": "Server not found."
}
Returned if the server ID does not exist or does not belong to your account.
Permanently destroys a server. The server is marked as destroyed and can no longer be accessed. This action cannot be undone.
Path Parameters
Required Scope
servers:write
Response 200 OK
{
"success": true,
"data": {
"id": "c13fe9bb-8582-4b6b-a43e-e2bbf9806123",
"status": "destroyed",
"destroyedAt": "2026-07-20T16:00:00.000Z"
},
"message": "Server c13fe9bb has been destroyed."
}
cURL Example
curl -X DELETE -H "Authorization: Bearer hkey_your_api_key" \
https://hostingowy.com/api/v1/servers/c13fe9bb-8582-4b6b-a43e-e2bbf9806123
Response 404 Not Found
{
"success": false,
"error": "Server not found."
}
Node.js SDK
The official Hostingowy Node.js SDK makes it easy to integrate with the API. Install it from GitHub:
npm install hostingowy-api
Quick Start
const Hostingowy = require('hostingowy-api');
// Initialize with your API key
const hostingowy = new Hostingowy({
apiKey: 'hkey_your_api_key_here'
});
// List your servers
async function listServers() {
const servers = await hostingowy.servers.list();
console.log(servers);
}
// Create a new VPS
async function createServer() {
const server = await hostingowy.servers.create({
plan: 'vps-2',
region: 'lon1',
os: 'ubuntu-22.04',
hostname: 'my-app-server'
});
console.log(`Server ${server.id} is being provisioned`);
}
// Get server details
async function getServer(serverId) {
const server = await hostingowy.servers.get(serverId);
console.log(`Status: ${server.status}, IP: ${server.ipv4}`);
}
// Check API key info
async function getMe() {
const me = await hostingowy.me();
console.log(`Key: ${me.label}, Used: ${me.rateLimit.used}/${me.rateLimit.limit}`);
}
Installation
The SDK source is available at github.com/hostingowy/api-sdk-node. To install directly from GitHub:
npm install git+https://github.com/hostingowy/api-sdk-node.git
API Reference
| Method | Description |
|---|---|
hostingowy.me() | Get API key info & rate limits |
hostingowy.servers.list(filters) | List all servers (optional: status, region) |
hostingowy.servers.create(config) | Provision a new server |
hostingowy.servers.get(id) | Get detailed server info |
hostingowy.servers.destroy(id) | Destroy a server (requires servers:write scope) |
Python SDK
The official Hostingowy Python SDK is available on PyPI. Install it directly:
pip install hostingowy
Quick Start
from hostingowy import Hostingowy
import os
# Initialize with your API key
client = Hostingowy(api_key=os.environ['HOSTINGOWY_API_KEY'])
# List your servers
servers = client.servers.list()
print(f'Found {len(servers["data"])} server(s)')
# Create a new VPS
server = client.servers.create(
plan='vps-1',
region='lon1',
os='ubuntu-22.04',
hostname='my-python-server'
)
print(f'Server provisioning: {server["data"]["id"]}')
# Get server details
detail = client.servers.get(server['data']['id'])
print(f'Status: {detail["data"]["status"]}')
# Check API key info
me = client.me()
print(f'Key: {me["data"]["label"]}')
You can also use the API directly with requests:
import requests
API_BASE = "https://hostingowy.com/api/v1"
API_KEY = "hkey_your_api_key_here"
headers = {
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json"
}
# List servers
response = requests.get(f"{API_BASE}/servers", headers=headers)
servers = response.json()
print(f"Found {servers['meta']['total']} server(s)")
# Create a server
new_server = {
"plan": "vps-1",
"region": "lon1",
"os": "ubuntu-22.04",
"hostname": "my-python-server"
}
response = requests.post(f"{API_BASE}/servers", json=new_server, headers=headers)
result = response.json()
print(f"Server provisioning: {result['data']['id']}")
# Get server details
server_id = result['data']['id']
response = requests.get(f"{API_BASE}/servers/{server_id}", headers=headers)
server = response.json()
print(f"Status: {server['data']['status']}")
# Check API key info
response = requests.get(f"{API_BASE}/me", headers=headers)
me = response.json()
print(f"Key: {me['data']['label']}, Usage: {me['data']['rateLimit']['used']}/{me['data']['rateLimit']['limit']}")
cURL Examples
All API endpoints can be used directly with cURL. Here's a complete workflow:
#!/bin/bash
API_KEY="hkey_your_api_key"
BASE="https://hostingowy.com/api/v1"
# 1. Check your API key info
curl -s -H "Authorization: Bearer $API_KEY" "$BASE/me" | jq .
# 2. List your servers
curl -s -H "Authorization: Bearer $API_KEY" "$BASE/servers" | jq .
# 3. Create a VPS ("lon1" = London, "vps-1" = 1 vCPU, 1GB RAM)
curl -s -X POST \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{"plan":"vps-1","region":"lon1","os":"ubuntu-22.04"}' \
"$BASE/servers" | jq .
# 4. Get server details (replace SERVER_ID)
curl -s -H "Authorization: Bearer $API_KEY" \
"$BASE/servers/SERVER_ID" | jq .
# 5. Destroy a server (replace SERVER_ID)
curl -s -X DELETE \
-H "Authorization: Bearer $API_KEY" \
"$BASE/servers/SERVER_ID" | jq .
# 6. Filter servers by status
curl -s -H "Authorization: Bearer $API_KEY" \
"$BASE/servers?status=active" | jq .
API Key Management
You can manage your API keys programmatically using these internal endpoints:
Request Body
["servers:read","servers:write"]
cURL Example
curl -X POST \
-H "Content-Type: application/json" \
-d '{"customerId":"your-customer-id","label":"My CI Key","scopes":["servers:read","servers:write"]}' \
https://hostingowy.com/api/keys
Query Parameters
curl "https://hostingowy.com/api/keys?customerId=your-customer-id"
Query Parameters
curl -X DELETE "https://hostingowy.com/api/keys/key-id?customerId=your-customer-id"
Plan Reference
| Plan | vCPU | RAM | Storage | Bandwidth | Price |
|---|---|---|---|---|---|
vps-1 | 1 | 1 GB | 25 GB NVMe | 1 TB | £5.99/mo |
vps-2 | 2 | 2 GB | 50 GB NVMe | 2 TB | £11.99/mo |
vps-4 | 4 | 4 GB | 100 GB NVMe | 4 TB | £23.99/mo |
vps-8 | 8 | 8 GB | 200 GB NVMe | 8 TB | £47.99/mo |
Region Reference
| Code | Location | Country |
|---|---|---|
lon1 | London (Telehouse North) | 🇬🇧 United Kingdom |
man1 | Manchester (Telecity) | 🇬🇧 United Kingdom |
All datacentres feature 24/7 security, redundant power (N+1), and multiple Tier-1 upstream providers.
OS Images
| Image | Version | Arch | Notes |
|---|---|---|---|
ubuntu-22.04 | 22.04 LTS (Jammy) | x86_64 | Recommended — stable, long support |
ubuntu-24.04 | 24.04 LTS (Noble) | x86_64 | Latest LTS |
debian-12 | 12 (Bookworm) | x86_64 | Rock-solid stability |
centos-9 | 9 Stream | x86_64 | RHEL-compatible |
fedora-38 | 38 | x86_64 | Latest packages |
rocky-9 | 9 | x86_64 | RHEL-compatible (community) |