OrbitHost

OrbitHost API · v1

Reseller API reference

Order and manage VPS, Windows RDP and game servers programmatically — with your reseller discount applied to everything.

60 req/minBearer auth

Introduction

The OrbitHost Reseller API lets you manage your whole fleet programmatically: order VPS, Windows RDP and game servers at your reseller discount, control power state, reinstall the OS and track every order — all from your account balance.

Response
Base URL   https://api.orbithost.net/v1
Auth       Bearer key  →  Authorization: Bearer oh_live_...
Format     JSON only
Rate limit 60 requests / minute / key
Sandbox    none — orders are real and charged from your balance

Authentication

Every request must carry your secret API key in the Authorization header. Keys are generated per account in Client Area → Reseller and can be rotated at any time — rotating instantly revokes the previous key. Treat your key like a password: it spends your balance.

Response
curl https://api.orbithost.net/v1/me \
  -H "Authorization: Bearer oh_live_xxxxxxxxxxxxxxxxxxxx"

Errors

Non-200 responses always return a JSON body containing an error message that is safe to show to your own customers.

Response
{
  "error": "Not enough account balance. You have 12, need 40."
}

Status codes
  400  Bad request        invalid plan, region or config
  401  Unauthorized       missing or invalid API key
  402  Payment required   insufficient USDT balance
  403  Forbidden          not a reseller, or account suspended
  404  Not found          unknown order or service id
  429  Rate limited       slow down (60 req/min)
  5xx  Server error       provisioning issues auto-refund

Get account

GET/me

Returns your reseller profile: balance, currency and discount percentage.

Response
{
  "id": 42,
  "username": "acme",
  "displayName": "Acme Hosting",
  "email": "acme@example.com",
  "balance": 250,
  "currency": "USDT",
  "discount_percent": 20
}

List plans & pricing

GET/plans

Every orderable product with list price and your discounted price already applied. Use the planId values exactly as returned when placing orders.

Response
{
  "currency": "USDT",
  "discount_percent": 20,
  "products": {
    "vps": [
      {
        "product": "vps",
        "slug": "core",
        "name": "Core",
        "memory_mb": 8192,
        "disk_mb": 102400,
        "cpu_cores": 4,
        "featured": true,
        "cheapest": {
          "planId": "vps-nano-ryzen",
          "list_usd": 6,
          "usd": 4.8,
          "coins": 5
        },
        "variants": { "...": "one entry per CPU type" }
      }
    ],
    "rdp": [ { "...": "same shape as vps" } ],
    "game": [
      {
        "game": "samp",
        "name": "SAMP · 2GB",
        "planId": "custom",
        "memory_mb": 2048,
        "disk_mb": 10240,
        "cpu": 100,
        "slots": 50,
        "list_usd": 4.0,
        "usd": 3.4,
        "coins": 4
      }
    ]
  }
}

Create an order

POST/orders

Place an order paid from your USDT balance at your reseller discount. VPS/RDP provision automatically in under 60 seconds; failed provisioning is refunded automatically.

Request
// Cloud VPS
curl -X POST https://api.orbithost.net/v1/orders \
  -H "Authorization: Bearer $ORBIT_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "product": "vps",
    "planId": "vps-nano-ryzen",
    "region": "eu-west",
    "serverName": "acme-web-01"
  }'

// Windows RDP
-d '{ "product": "rdp", "planId": "rdp-pro-ryzen", "region": "eu-west" }'

// Game server — preset tiers via memory/slots config
-d '{
  "game": "samp",
  "region": "eu-west",
  "memory_mb": 2048,
  "disk_mb": 10240,
  "cpu": 100,
  "slots": 50,
  "serverName": "my-server"
}'
Response
{
  "order": {
    "id": 918,
    "status": "paid",
    "amount_coins": 5,
    "amount_usd": 4.8,
    "server_name": "acme-web-01"
  },
  "server": { "id": 402, "name": "acme-web-01" },
  "fulfillment": "ryze",
  "pricing": {
    "list_coins": 6,
    "charged": 5,
    "saved": 1,
    "discount_percent": 20
  },
  "balance": 245,
  "credentials": null
}

List orders

GET/orders

Returns every order on the account, newest first.

Response
{
  "orders": [ { "id": 918, "status": "paid", "...": "..." } ],
  "count": 1
}

Get an order

GET/orders/:id

Fetch a single order by id.

Response
{ "order": { "id": 918, "status": "paid", "...": "..." } }

List services

GET/services

All active services on the account — VPS, RDP and game servers — including their current status and OS.

Response
{
  "services": [
    {
      "id": 402,
      "name": "acme-web-01",
      "type": "vps",
      "status": "online",
      "os": "ubuntu-2404-noble",
      "spec": { "memory_mb": 8192, "disk_mb": 102400, "cpu_percent": 200 },
      "region": "eu-west",
      "created_at": "2026-08-22T12:00:00.000Z"
    },
    {
      "id": 403,
      "name": "my-server",
      "type": "game",
      "game": "samp",
      "status": "active",
      "connect": "nl-1.orbithost.net:7777"
    }
  ],
  "count": 2
}

Get service

GET/services/:id

Fetch one service. For VPS/RDP a live object is included with real-time CPU, RAM, disk, uptime and power state from the provider.

Response
{
  "service": { "id": 402, "type": "vps", "..."": "..." },
  "live": {
    "status": "running",
    "uptime": 862400,
    "usage": {
      "cpu": { "percentage": 12.4 },
      "mem":  { "percentage": 41.2, "used_mb": 3376, "total_mb": 8192 },
      "disk": { "percentage": 18.9, "used_gb": 19.4, "total_gb": 100 }
    }
  }
}

Power actions

POST/services/:id/power

Start, stop or restart a VPS/RDP. The action is executed on the provider immediately; poll GET /services/:id for the resulting live state.

Request
curl -X POST https://api.orbithost.net/v1/services/402/power \
  -H "Authorization: Bearer $ORBIT_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "action": "restart" }'
Response
{ "ok": true, "data": { "action": "restart", "..."": "..." } }

Reinstall OS

POST/services/:id/reinstall

Reinstall the operating system. All data is destroyed. On VPS pick any Linux image; RDP reinstalls Windows images. When the provider generates a new root password it is returned once — store it immediately.

Request
curl -X POST https://api.orbithost.net/v1/services/402/reinstall \
  -H "Authorization: Bearer $ORBIT_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "os": "debian-12-bookworm" }'
Response
{
  "ok": true,
  "data": { "os": "debian-12-bookworm", "password": "Hx9a2..." },
  "note": "Store the returned password now — it is shown once."
}

Live status

GET/services/:id/status

Real-time power state, uptime and resource usage (CPU / RAM / disk) straight from the node.

Response
{
  "status": {
    "status": "running",
    "uptime": 862400,
    "usage": {
      "cpu": { "percentage": 12.4 },
      "mem":  { "percentage": 41.2 },
      "disk": { "percentage": 18.9 }
    }
  }
}

Get service config

GET/services/:id/config

Raw provider configuration for the VM — CPU, RAM, disk, network, image and install state.

Response
{ "config": { "cores": 4, "memory": 8192, "disk": 102400 } }

Hardware info

GET/services/:id/hardware

CPU model, core count, memory and storage as reported by the physical node.

Response
{ "hardware": { "cpu": "AMD Ryzen 9 9950X", "cores": 4, "memory_gb": 8 } }

Reset root password

POST/services/:id/password

Set a new root/administrator password. Omit password to let the provider generate one — it is returned once in the response.

Request
-d '{ "password": "super-secret-42" }'
Response
{ "ok": true, "password": "generated-or-provided" }

VNC console URL

GET/services/:id/vnc

Returns a short-lived VNC/noVNC connection for out-of-band access when SSH or RDP is unreachable.

Response
{ "vnc": { "url": "wss://vnc.eu-west.orbithost.net/...", "expires_in": 120 } }

Renew a service

POST/services/:id/renew

Extend a VPS/RDP lease by 30, 90 or 365 days. Charged from your balance at your reseller discount. Provider rejections are refunded automatically.

Request
curl -X POST https://api.orbithost.net/v1/services/:id/renew \
  -H "Authorization: Bearer $ORBIT_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "duration": 90 }'
Response
{ "ok": true, "charged": 27.54, "discount_percent": 20, "data": { "new_expire_date": "2026-11-20" } }

Cancel a service

POST/services/:id/cancel

Cancels the VM at the provider immediately. Any eligible refund is credited to your balance per policy (75% within 7 days, 50% within 15, else 15%).

Request
curl -X POST https://api.orbithost.net/v1/services/:id/cancel \
  -H "Authorization: Bearer $ORBIT_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'
Response
{ "ok": true, "provider": { }, "note": "Refund (if eligible) was credited to your balance by staff policy." }

List OS images

GET/catalog/os

Images available for (re)installs — Ubuntu, Debian, Rocky, Windows Server and more.

Request
curl https://api.orbithost.net/v1/catalog/os \
  -H "Authorization: Bearer $ORBIT_KEY"
Response
{ "os": [ { "id": "ubuntu-2404-noble", "name": "Ubuntu 24.04" }, { "id": "debian-12-bookworm", "name": "Debian 12" } ], "configured": true }

List host nodes

GET/catalog/hosts

Physical nodes behind each region — useful to check capacity before ordering.

Response
{ "hosts": [ { "id": "fra-1", "region": "eu-west", "status": "online" } ] }

Raw provider prices

GET/catalog/prices

Live provider price matrix. Your discounted pricing is always available via GET /plans.

Response
{ "...": "provider price matrix", "configured": true }

List firewall rules

GET/services/:id/firewall

Every firewall rule with its position, action, protocol, port range and enabled flag. Order matters — first match wins.

Response
{
  "firewall": {
    "enabled": true,
    "rules": [
      { "pos": 0, "name": "ssh", "action": "accept", "protocol": "tcp", "port": "22", "enabled": true },
      { "pos": 1, "name": "web", "action": "accept", "protocol": "tcp", "port": "80,443", "enabled": true }
    ]
  }
}

Create firewall rule

POST/services/:id/firewall/rules

Appends a rule to the end of the chain.

Request
curl -X POST https://api.orbithost.net/v1/services/:id/firewall/rules \
  -H "Authorization: Bearer $ORBIT_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "rule": {
      "name": "allow-http",
      "action": "accept",
      "protocol": "tcp",
      "port": "80",
      "source": "0.0.0.0/0"
    }
  }'
Response
{ "ok": true, "data": { "pos": 2, "name": "allow-http" } }

Update a firewall rule

PUT/services/:id/firewall/rules

Replace the rule at the given position.

Request
-d '{ "pos": 1, "rule": { "name": "secure-web", "protocol": "tcp", "port": "443", "action": "accept" } }'
Response
{ "ok": true, "data": { "pos": 1, "name": "secure-web" } }

Enable / disable a rule

PATCH/services/:id/firewall/rules/toggle

Flip a rule on or off without deleting it.

Request
-d '{ "pos": 1, "enable": false }'
Response
{ "ok": true, "data": { "pos": 1, "enabled": false } }

Move a rule

PUT/services/:id/firewall/rules/move

Reorder a rule — e.g. move a block rule above an accept rule.

Request
-d '{ "from": 2, "to": 0 }'
Response
{ "ok": true }

Delete a firewall rule

DELETE/services/:id/firewall/rules

Remove a rule by position (JSON body or ?pos= query). Remaining rules shift up.

Request
-d '{ "pos": 1 }'
Response
{ "ok": true }

Firewall options

PUT/services/:id/firewall/options

Enable/disable the whole firewall or change default policies in one call.

Request
-d '{ "enabled": true }'
Response
{ "ok": true, "data": { "enabled": true } }

DDoS overview, rules & attacks

GET/services/:id/ddos

Protection mode, layer-4 filter rules and recent attack activity for the service. Always-on mitigation is included with every server.

Response
{
  "ddos":   { "protection": "standard", "auto_mitigation": true },
  "rules":  [ { "id": "r1", "protocol": "udp", "ports": "19132", "action": "allow" } ]
}

Delete a DDoS port rule

DELETE/services/:id/ddos/rules

Remove one custom layer-4 port filter rule by id.

Request
-d '{ "rule_id": "r1" }'
Response
{ "ok": true }

Create attack webhook

POST/services/:id/ddos/webhooks

Get notified when an attack starts/ends for this service — perfect for auto-scaling or alerting scripts.

Request
curl -X POST https://api.orbithost.net/v1/services/:id/ddos/webhooks \
  -H "Authorization: Bearer $ORBIT_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "ops-alerts",
    "url": "https://hooks.example.com/orbit-ddos",
    "secret": "whsec_..."
  }'
Response
{ "ok": true, "data": { "id": "wh_1", "name": "ops-alerts" } }

Update attack webhook

PUT/services/:id/ddos/webhooks

Change the target URL, name or secret of an existing webhook.

Request
-d '{ "id": "wh_1", "url": "https://hooks.example.com/new" }'
Response
{ "ok": true, "data": { "id": "wh_1" } }

Delete attack webhook

DELETE/services/:id/ddos/webhooks

Remove a webhook by id (`?id=` or JSON body).

Request
-d '{ "id": "wh_1" }'
Response
{ "ok": true }

Enable / disable a webhook

PATCH/services/:id/ddos/webhooks/toggle

Pause deliveries without deleting the webhook configuration.

Request
-d '{ "id": "wh_1", "enable": false }'
Response
{ "ok": true, "data": { "id": "wh_1", "enabled": false } }

Send test delivery

POST/services/:id/ddos/webhooks/test

Fire a signed test payload at your webhook endpoint to verify your receiver.

Request
-d '{ "id": "wh_1" }'
Response
{ "ok": true, "data": { "delivered": true, "status": 200 } }

List IP addresses

GET/services/:id/ips

All IPv4/IPv6 addresses assigned to the service with their PTR records and main-flag.

Response
{
  "ips": [
    { "ip": "45.x.x.x", "type": "ipv4", "main": true, "ptr": "acme-web-01.orbithost.net" }
  ]
}

Set reverse DNS (PTR)

POST/services/:id/ptr

Update the reverse DNS record for one of the service's IPs.

Request
curl -X POST https://api.orbithost.net/v1/services/:id/ptr \
  -H "Authorization: Bearer $ORBIT_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "ip": "45.x.x.x", "ptr": "acme-web-01.example.com" }'
Response
{ "ok": true, "data": { "ptr": "acme-web-01.example.com" } }

Live status

GET/services/:id/status

Real-time power state, uptime and resource usage (CPU / RAM / disk) straight from the node.

Response
{
  "status": {
    "status": "running",
    "uptime": 862400,
    "usage": {
      "cpu": { "percentage": 12.4 },
      "mem":  { "percentage": 41.2 },
      "disk": { "percentage": 18.9 }
    }
  }
}

Get service config

GET/services/:id/config

Raw provider configuration for the VM — CPU, RAM, disk, network, image and install state.

Response
{ "config": { "cores": 4, "memory": 8192, "disk": 102400 } }

Hardware info

GET/services/:id/hardware

CPU model, core count, memory and storage as reported by the physical node.

Response
{ "hardware": { "cpu": "AMD Ryzen 9 9950X", "cores": 4, "memory_gb": 8 } }

Reset root password

POST/services/:id/password

Set a new root/administrator password. Omit password to let the provider generate one — it is returned once in the response.

Request
-d '{ "password": "super-secret-42" }'
Response
{ "ok": true, "password": "generated-or-provided" }

VNC console URL

GET/services/:id/vnc

Short-lived VNC/noVNC connection for out-of-band access when SSH or RDP is unreachable.

Response
{ "vnc": { "url": "wss://vnc.eu-west.orbithost.net/...", "expires_in": 120 } }

Renew a service

POST/services/:id/renew

Extend a VPS/RDP lease by 30, 90 or 365 days. Charged from your balance at your reseller discount. Provider rejections are refunded automatically.

Request
curl -X POST https://api.orbithost.net/v1/services/:id/renew \
  -H "Authorization: Bearer $ORBIT_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "duration": 90 }'
Response
{ "ok": true, "charged": 27.54, "discount_percent": 20, "data": { "new_expire_date": "2026-11-20" } }

Cancel a service

POST/services/:id/cancel

Cancels the VM at the provider immediately. Any eligible refund is credited to your balance per policy (75% within 7 days, 50% within 15, else 15%).

Request
curl -X POST https://api.orbithost.net/v1/services/:id/cancel \
  -H "Authorization: Bearer $ORBIT_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'
Response
{ "ok": true, "provider": {}, "note": "Refund (if eligible) was credited to your balance by staff policy." }

List OS images

GET/catalog/os

Images available for (re)installs — Ubuntu, Debian, Rocky, Windows Server and more.

Request
curl https://api.orbithost.net/v1/catalog/os \
  -H "Authorization: Bearer $ORBIT_KEY"
Response
{ "os": [ { "id": "ubuntu-2404-noble", "name": "Ubuntu 24.04" }, { "id": "debian-12-bookworm", "name": "Debian 12" } ], "configured": true }

List host nodes

GET/catalog/hosts

Physical nodes behind each region — check capacity before ordering.

Response
{ "hosts": [ { "id": "fra-1", "region": "eu-west", "status": "online" } ] }

Raw provider prices

GET/catalog/prices

Live provider price matrix. Your discounted pricing is always available via GET /plans.

Response
{ "...": "provider price matrix", "configured": true }