NetGrid Host
REST · JSON · Bearer

Developer API

Manage your servers programmatically: create, reinstall and reboot VPS, fetch plans, OS images and datacenters — all over a simple REST API.

Browse endpoints
Bearer token
Keys are created in the dashboard, scoped to allowed IPs.
IP allowlist
Each key works only from the IPs you allow.
Instant ordering
Creating a VPS debits balance and returns the root password.
Full lifecycle
Order, power, reinstall, password — all from code.

Quick start

Base URL and authentication. Send your key in the header of every request.

BASE URL
https://billing.netgrid.host/api/v1/ext
EXAMPLE REQUEST (cURL)
curl -H "Authorization: Bearer YOUR_API_KEY" \
     https://billing.netgrid.host/api/v1/ext/whoami

API endpoints

Account
GET/whoami

Verify your key and see which account it belongs to.

RESPONSE
{
  "account_id": 4406,
  "key_id": 12,
  "label": "production"
}
Servers
GET/vps

List your servers. Filter by IP with ?ip=1.2.3.4

RESPONSE
{
  "vps": {
    "items": [
      { "id": 24402, "name": "web-1",
        "ip": "151.247.25.10",
        "status": "active" }
    ],
    "total": 1
  }
}
GET/vps/{id}

Full details of one server, including root password.

RESPONSE
{
  "id": 24402, "name": "web-1",
  "ip": "151.247.25.10",
  "plan": "Business", "os": "AlmaLinux 9",
  "root_password": "••••••••"
}
POST/vps

Order a new VPS. Debits account balance, provisions async, returns the root password right away.

REQUEST BODY
{
  "plan_id": 3,
  "dc_id": 1,
  "os_family_slug": "almalinux",
  "os_item_id": "almalinux-9",
  "hostname": "web-1",
  "period": 1,
  "autorenew": true
}
RESPONSE
{
  "item_id": 24403,
  "root_password": "Ng7xK2..."
}
POST/vps/{id}/power/{action}

Power control: start, stop or reboot.

RESPONSE
{ "ok": true, "action": "reboot" }
POST/vps/{id}/reinstall

Reinstall the OS. Optionally set a root password.

REQUEST BODY
{
  "os_id": "ubuntu-24.04",
  "password": "optional"
}
RESPONSE
{ "ok": true }
POST/vps/{id}/reset-password

Reset root password (auto-generated if omitted).

RESPONSE
{ "ok": true, "password": "Ng9..." }
Catalog
GET/plans

Available plans (id, cpu, ram, disk, price) for ordering.

RESPONSE
{
  "plans": [
    { "id": 3, "name": "Business",
      "cpu": 2, "ram": 2048,
      "disk": 50, "price": 7.0 }
  ]
}
GET/os

Installable OS images (families + versions).

RESPONSE
{
  "families": [
    { "slug": "almalinux",
      "items": [{ "id": "almalinux-9" }] }
  ]
}
GET/datacenters

Datacenters you can order in. Use id as dc_id.

RESPONSE
{
  "datacenters": [
    { "id": 1, "city": "Meppel",
      "country_code": "nl" }
  ]
}

Errors

Errors come back with the matching HTTP status and a detail field.

400
Bad request (e.g. insufficient balance)
401
Missing or invalid API key
403
Source IP not in allowlist
404
Resource not found for this account
ERROR EXAMPLE
{
  "detail": "insufficient_balance"
}

Ready to automate?

Create an API key in your dashboard, add your allowed IPs, and drive your infrastructure from code.