📡 API v1 Reference

Programmatically manage your Hostingowy VPS instances — provision servers, query status, and automate your infrastructure.

Base URL: https://hostingowy.com/api/v1
Content-Type: application/json
Authentication: 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.

⚠️ Important: The API key token is shown only once at creation. Store it securely — treat it like a password.

Scopes

API keys are scoped to limit what they can do. Available scopes:

ScopePermissions
servers:readList servers, get server details, read metadata
servers:writeCreate and manage servers (includes read)
adminFull 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.

LimitWindowScope
1,000 requests1 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

StatusErrorDescription
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

GET /api/v1/me Get API key info & usage

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
GET /api/v1/servers List your servers

Returns a list of all VPS instances belonging to your account. Supports optional filtering by status and region.

Query Parameters

status string optional Filter by status: active, suspended, provisioning
region string optional Filter by region: 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"
POST /api/v1/servers Create a new VPS

Provision a new VPS instance. The server is created in a provisioning state and typically becomes active within 2–5 minutes.

Request Body

plan string required Server plan: vps-1, vps-2, vps-4, vps-8
region string required Datacentre region: lon1 (London), man1 (Manchester)
os string required Operating system: ubuntu-22.04, ubuntu-24.04, debian-12, centos-9, fedora-38, rocky-9
hostname string optional Custom hostname for the server

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."
}
GET /api/v1/servers/:id Get server details

Returns detailed information about a specific server, including its current status, IP addresses, specs, and provisioning timestamps.

Path Parameters

id UUID required Server ID (UUID v4)

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.

DELETE /api/v1/servers/:id Destroy a server

Permanently destroys a server. The server is marked as destroyed and can no longer be accessed. This action cannot be undone.

⚠️ Irreversible. All data on the server will be permanently deleted. Ensure you have backups before destroying a server.

Path Parameters

id UUID required Server ID (UUID v4)

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

⬇ Download Node.js SDK (.tgz)

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

MethodDescription
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

📦 View on PyPI 🐙 GitHub

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:

POST /api/keys Generate a new API key

Request Body

customerId UUID required Your customer ID (from dashboard)
label string required Human-friendly label, e.g. "CI/CD Pipeline"
scopes string[] optional Default: ["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
GET /api/keys List your API keys

Query Parameters

customerId UUID required Your customer ID
curl "https://hostingowy.com/api/keys?customerId=your-customer-id"
DELETE /api/keys/:id Revoke an API key

Query Parameters

customerId UUID required Your customer ID
curl -X DELETE "https://hostingowy.com/api/keys/key-id?customerId=your-customer-id"

Plan Reference

PlanvCPURAMStorageBandwidthPrice
vps-111 GB25 GB NVMe1 TB£5.99/mo
vps-222 GB50 GB NVMe2 TB£11.99/mo
vps-444 GB100 GB NVMe4 TB£23.99/mo
vps-888 GB200 GB NVMe8 TB£47.99/mo

Region Reference

CodeLocationCountry
lon1London (Telehouse North)🇬🇧 United Kingdom
man1Manchester (Telecity)🇬🇧 United Kingdom

All datacentres feature 24/7 security, redundant power (N+1), and multiple Tier-1 upstream providers.

OS Images

ImageVersionArchNotes
ubuntu-22.0422.04 LTS (Jammy)x86_64Recommended — stable, long support
ubuntu-24.0424.04 LTS (Noble)x86_64Latest LTS
debian-1212 (Bookworm)x86_64Rock-solid stability
centos-99 Streamx86_64RHEL-compatible
fedora-3838x86_64Latest packages
rocky-99x86_64RHEL-compatible (community)