Get VPS network state

GET /api/v2/vps/{id}/network

Return network interfaces, assigned addresses, available public addresses, private-network context, reverse DNS state, in-server IP status, IP-change limits, and action gates for one VPS.

For fixed-plan VPSs, ipChangePolicy.monthlyLimit is calculated as two changes per configured public IPv4 slot, with a minimum of two changes per month.

Get {id} from GET /api/v2/vps data[].id.

Use this before network writes to choose ipId, subnetId, and interfaceName, and to check blockers before submitting a mutation.

guestNetwork.status: "mismatch" means the portal has assigned addresses that the running server is not using yet; guestNetwork.actions.canRepair tells whether the automatic in-server repair action can be used.

VPS Services Networking

Authentication

Required API scope: read:vm

Authenticate with an API key in the Authorization: Bearer <token> header.

Context

Path Parameters

id string required Example: vps_01hxa3b4c5d6e7f8g9h0j1k2m3

Public VPS ID from GET /api/v2/vps data[].id. Do not invent this value; use the exact ID returned by the referenced API response.

Headers

Authorization Bearer <token>
Accept application/json

Responses

200 VPS network state.
interfaces array<object> required
interfaces[].id string · nullable required · Example: net0

Nullable: may be null when not applicable.

interfaces[].model string · nullable required · Example: virtio

Nullable: may be null when not applicable.

interfaces[].mac string · nullable required · Example: 52:54:00:12:34:56

Nullable: may be null when not applicable.

interfaces[].bridge string · nullable required · Example: vmbr0

Nullable: may be null when not applicable.

interfaces[].vlan number · nullable required · Example: null

Nullable: may be null when not applicable.

interfaces[].firewallEnabled boolean required · Example: true
interfaces[].linkDown boolean required · Example: false
interfaces[].ip array<object> required
interfaces[].ip[].id string · nullable required · Example: ip_01hxa3b4c5d6e7f8g9h0j1k2m3

Nullable: may be null when not applicable.

interfaces[].ip[].type string · nullable required · Example: ipv4

Nullable: may be null when not applicable.

interfaces[].ip[].ip string · nullable required · Example: 203.0.113.42

Nullable: may be null when not applicable.

interfaces[].ip[].mask string · nullable required · Example: 24

Nullable: may be null when not applicable.

interfaces[].ip[].main boolean required · Example: true
interfaces[].ip[].isPrivate boolean required · Example: false
interfaces[].ip[].revdns string · nullable required · Example: app-01.example.com

Nullable: may be null when not applicable.

interfaces[].ip[].rdnsAvailable boolean required · Example: true
interfaces[].ip[].vlan number · nullable required · Example: null

Nullable: may be null when not applicable.

interfaces[].ip[].subnet object · nullable required · Example: null

Nullable: may be null when not applicable.

availableIPv4 array<object> required
availableIPv4[].id string · nullable required · Example: ip_01hxa3b4c5d6e7f8g9h0j1k2m3

Nullable: may be null when not applicable.

availableIPv4[].type string · nullable required · Example: ipv4

Nullable: may be null when not applicable.

availableIPv4[].ip string · nullable required · Example: 203.0.113.10

Nullable: may be null when not applicable.

availableIPv4[].status string · enum required · Example: available
available
assigned_to_account
availableIPv4[].mask string · nullable required · Example: 24

Nullable: may be null when not applicable.

availableIPv4[].main boolean required · Example: false
availableIPv4[].isPrivate boolean required · Example: false
availableIPv4[].vlan number · nullable required · Example: null

Nullable: may be null when not applicable.

availableIPv4[].subnet object · nullable required · Example: null

Nullable: may be null when not applicable.

availableIPv6 array<object> required
availableIPv6[].id string · nullable required · Example: ip_01hxa3b4c5d6e7f8g9h0j1k2m3

Nullable: may be null when not applicable.

availableIPv6[].type string · nullable required · Example: ipv6

Nullable: may be null when not applicable.

availableIPv6[].ip string · nullable required · Example: 2001:db8:100::10

Nullable: may be null when not applicable.

availableIPv6[].status string · enum required · Example: available
available
assigned_to_account
availableIPv6[].mask string · nullable required · Example: 64

Nullable: may be null when not applicable.

availableIPv6[].main boolean required · Example: false
availableIPv6[].isPrivate boolean required · Example: false
availableIPv6[].vlan number · nullable required · Example: null

Nullable: may be null when not applicable.

availableIPv6[].subnet object · nullable required · Example: null

Nullable: may be null when not applicable.

ipv4Limit integer required · Example: 2
ipv6Limit integer required · Example: 1
reservedPublicIpv4Count integer required · Example: 1
reservedPublicIpv6Count integer required · Example: 0
limits object required
limits.ipv4 object required
limits.ipv4.total integer required · Example: 2
limits.ipv4.used integer required · Example: 1
limits.ipv4.available integer required · Example: 1
limits.ipv6 object required
limits.ipv6.total integer required · Example: 1
limits.ipv6.used integer required · Example: 0
limits.ipv6.available integer required · Example: 1
primaryIP string · nullable required · Example: 203.0.113.42

primaryIPrDNS string · nullable required · Example: app-01.example.com

primaryRdnsAvailable boolean required · Example: true
primaryNetwork object · nullable required · Example: null

guestNetwork object · nullable required

ipAvailability object required
ipAvailability.ipv4 object required
ipAvailability.ipv4.availableCount integer required · Example: 1
ipAvailability.ipv4.currentNetworkAvailableCount integer · nullable required · Example: 1

Nullable: may be null when not applicable.

ipAvailability.ipv4.currentNetworkKnown boolean required · Example: true
ipAvailability.ipv4.reason string · nullable required · Example: null

Nullable: may be null when not applicable.

ipAvailability.ipv6 object required
ipAvailability.ipv6.availableCount integer required · Example: 1
ipAvailability.ipv6.currentNetworkAvailableCount integer · nullable required · Example: 1

Nullable: may be null when not applicable.

ipAvailability.ipv6.currentNetworkKnown boolean required · Example: true
ipAvailability.ipv6.reason string · nullable required · Example: null

Nullable: may be null when not applicable.

vlanTag number · nullable required · Example: null

ipv6UpgradeOption object · nullable required · Example: null

privateNetworks array<object> required
privateNetworks[].parentCidr string · nullable required · Example: 10.24.0.0/16

Nullable: may be null when not applicable.

privateNetworks[].status string · nullable required · Example: pending_switch

Nullable: may be null when not applicable.

privateNetworks[].subnets array<object> required
privateNetworks[].subnets[].id string · nullable required · Example: subnet_01hxa3b4c5d6e7f8g9h0j1k2m3

Nullable: may be null when not applicable.

privateNetworks[].subnets[].subnetCidr string · nullable required · Example: 10.24.10.0/24

Nullable: may be null when not applicable.

privateNetworks[].subnets[].vlanTag number · nullable required · Example: 220

Nullable: may be null when not applicable.

privateNetworks[].subnets[].gateway string · nullable required · Example: 10.24.10.1

Nullable: may be null when not applicable.

privateNetworks[].subnets[].status string · nullable required · Example: retired

Nullable: may be null when not applicable.

privateNetworks[].subnets[].usage object · nullable required · Example: null

Nullable: may be null when not applicable.

privateNetworkDefaults object · nullable required · Example: null

ipChangePolicy object · nullable required · Example: null

Monthly public IPv4 change quota and reset state. For fixed-plan VPSs the monthly limit is two changes per configured public IPv4 slot, with a minimum of two.

actions object required
actions.canAddPublicInterface object required
actions.canAddPublicInterface.allowed boolean required · Example: true
actions.canAddPublicInterface.reason string · nullable required · Example: null

Nullable: may be null when not applicable.

actions.canAddPublicInterface.code string · nullable · Example: pending_order

Machine-readable reason code when an action is blocked.

actions.canAddIpv4 object required
actions.canAddIpv4.allowed boolean required · Example: true
actions.canAddIpv4.reason string · nullable required · Example: null

Nullable: may be null when not applicable.

actions.canAddIpv4.code string · nullable · Example: pending_order

Machine-readable reason code when an action is blocked.

actions.canAddIpv6 object required
actions.canAddIpv6.allowed boolean required · Example: true
actions.canAddIpv6.reason string · nullable required · Example: null

Nullable: may be null when not applicable.

actions.canAddIpv6.code string · nullable · Example: pending_order

Machine-readable reason code when an action is blocked.

actions.canChangeIp object required
actions.canChangeIp.allowed boolean required · Example: true
actions.canChangeIp.reason string · nullable required · Example: null

Nullable: may be null when not applicable.

actions.canChangeIp.code string · nullable · Example: pending_order

Machine-readable reason code when an action is blocked.

actions.canUpgradeIPv6 object required
actions.canUpgradeIPv6.allowed boolean required · Example: true
actions.canUpgradeIPv6.reason string · nullable required · Example: null

Nullable: may be null when not applicable.

actions.canUpgradeIPv6.code string · nullable · Example: pending_order

Machine-readable reason code when an action is blocked.

actions.canCreatePrivateNetwork object required
actions.canCreatePrivateNetwork.allowed boolean required · Example: true
actions.canCreatePrivateNetwork.reason string · nullable required · Example: null

Nullable: may be null when not applicable.

actions.canCreatePrivateNetwork.code string · nullable · Example: pending_order

Machine-readable reason code when an action is blocked.

400 Invalid request. The response body is an RFC 7807 Problem Details document.
type string · Example: https://developer.hostup.se/errors/invalid_request
title string · Example: Validation failed
status integer · Example: 400
detail string · Example: The request body failed validation.
code string · Example: invalid_request

Stable machine-readable code. Branch on this field, not on detail.

instance string · Example: /api/v2/orders
requestId string · Example: req_01hxa3b4c5d6e7f8g9h0j1k2m3
timestamp string · Example: 2026-04-27T12:34:56.000Z
errors array<object>

Field-level validation errors when code is invalid_request.

errors[].pointer string required · Example: /items/0/eppCode
errors[].detail string required · Example: `eppCode` is required for this transfer.
errors[].code string required · Example: missing_required
extensions object
401 Unauthorized. Authentication is required.
type string · Example: https://developer.hostup.se/errors/invalid_request
title string · Example: Validation failed
status integer · Example: 400
detail string · Example: The request body failed validation.
code string · Example: invalid_request

Stable machine-readable code. Branch on this field, not on detail.

instance string · Example: /api/v2/orders
requestId string · Example: req_01hxa3b4c5d6e7f8g9h0j1k2m3
timestamp string · Example: 2026-04-27T12:34:56.000Z
errors array<object>

Field-level validation errors when code is invalid_request.

errors[].pointer string required · Example: /items/0/eppCode
errors[].detail string required · Example: `eppCode` is required for this transfer.
errors[].code string required · Example: missing_required
extensions object
403 Forbidden. The caller lacks a required scope or does not own the resource.
type string · Example: https://developer.hostup.se/errors/invalid_request
title string · Example: Validation failed
status integer · Example: 400
detail string · Example: The request body failed validation.
code string · Example: invalid_request

Stable machine-readable code. Branch on this field, not on detail.

instance string · Example: /api/v2/orders
requestId string · Example: req_01hxa3b4c5d6e7f8g9h0j1k2m3
timestamp string · Example: 2026-04-27T12:34:56.000Z
errors array<object>

Field-level validation errors when code is invalid_request.

errors[].pointer string required · Example: /items/0/eppCode
errors[].detail string required · Example: `eppCode` is required for this transfer.
errors[].code string required · Example: missing_required
extensions object
404 Not found. The resource does not exist or is not owned by the caller.
type string · Example: https://developer.hostup.se/errors/invalid_request
title string · Example: Validation failed
status integer · Example: 400
detail string · Example: The request body failed validation.
code string · Example: invalid_request

Stable machine-readable code. Branch on this field, not on detail.

instance string · Example: /api/v2/orders
requestId string · Example: req_01hxa3b4c5d6e7f8g9h0j1k2m3
timestamp string · Example: 2026-04-27T12:34:56.000Z
errors array<object>

Field-level validation errors when code is invalid_request.

errors[].pointer string required · Example: /items/0/eppCode
errors[].detail string required · Example: `eppCode` is required for this transfer.
errors[].code string required · Example: missing_required
extensions object
429 Rate limited. Retry after the limit resets. 429 responses include Retry-After seconds plus X-RateLimit-* headers.
type string · Example: https://developer.hostup.se/errors/invalid_request
title string · Example: Validation failed
status integer · Example: 400
detail string · Example: The request body failed validation.
code string · Example: invalid_request

Stable machine-readable code. Branch on this field, not on detail.

instance string · Example: /api/v2/orders
requestId string · Example: req_01hxa3b4c5d6e7f8g9h0j1k2m3
timestamp string · Example: 2026-04-27T12:34:56.000Z
errors array<object>

Field-level validation errors when code is invalid_request.

errors[].pointer string required · Example: /items/0/eppCode
errors[].detail string required · Example: `eppCode` is required for this transfer.
errors[].code string required · Example: missing_required
extensions object
500 Internal error. Retry later or contact support if the issue persists.
type string · Example: https://developer.hostup.se/errors/invalid_request
title string · Example: Validation failed
status integer · Example: 400
detail string · Example: The request body failed validation.
code string · Example: invalid_request

Stable machine-readable code. Branch on this field, not on detail.

instance string · Example: /api/v2/orders
requestId string · Example: req_01hxa3b4c5d6e7f8g9h0j1k2m3
timestamp string · Example: 2026-04-27T12:34:56.000Z
errors array<object>

Field-level validation errors when code is invalid_request.

errors[].pointer string required · Example: /items/0/eppCode
errors[].detail string required · Example: `eppCode` is required for this transfer.
errors[].code string required · Example: missing_required
extensions object
GET https://cloud.hostup.se/api/v2/vps/{id}/network
For AI assistants
View as Markdown
cURL
curl -X GET "https://cloud.hostup.se/api/v2/vps/vps_01hxa3b4c5d6e7f8g9h0j1k2m3/network" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Accept: application/json"
Response
{
  "interfaces": [
    {
      "id": "net0",
      "model": "virtio",
      "mac": "52:54:00:12:34:56",
      "bridge": "vmbr0",
      "vlan": 112,
      "firewallEnabled": true,
      "linkDown": false,
      "ip": [
        {
          "id": "ip_01hxa3b4c5d6e7f8g9h0j1k2m3",
          "type": "ipv4",
          "ip": "203.0.113.42",
          "mask": "24",
          "main": true,
          "isPrivate": false,
          "revdns": "app-01.example.com",
          "rdnsAvailable": true,
          "vlan": 112,
          "subnet": {
            "id": null,
            "name": null,
            "parentCidr": "203.0.113.0/24",
            "gateway": "203.0.113.1"
          }
        }
      ]
    }
  ],
  "availableIPv4": [
    {
      "id": "ip_01hxa3b4c5d6e7f8g9h0j1k2m3",
      "type": "ipv4",
      "ip": "203.0.113.10",
      "status": "available",
      "mask": "24",
      "main": false,
      "isPrivate": false,
      "vlan": null,
      "subnet": {
        "id": null,
        "name": null,
        "parentCidr": "203.0.113.0/24",
        "gateway": "203.0.113.1"
      }
    }
  ],
  "availableIPv6": [],
  "ipv4Limit": 1,
  "ipv6Limit": 0,
  "reservedPublicIpv4Count": 1,
  "reservedPublicIpv6Count": 0,
  "limits": {
    "ipv4": {
      "total": 1,
      "used": 1,
      "available": 0
    },
    "ipv6": {
      "total": 0,
      "used": 0,
      "available": 0
    }
  },
  "primaryIP": "203.0.113.42",
  "primaryIPrDNS": "app-01.example.com",
  "primaryRdnsAvailable": true,
  "primaryNetwork": {
    "id": null,
    "name": null,
    "parentCidr": "203.0.113.0/24",
    "gateway": "203.0.113.1"
  },
  "guestNetwork": {
    "checked": true,
    "available": true,
    "vmRunning": true,
    "status": "mismatch",
    "reason": null,
    "interfaces": [
      {
        "name": "eth0",
        "mac": "52:54:00:12:34:56",
        "ip": [
          {
            "ip": "198.51.100.23",
            "type": "ipv4",
            "prefix": 24
          }
        ]
      }
    ],
    "checks": [
      {
        "interfaceName": "net0",
        "mac": "52:54:00:12:34:56",
        "guestInterfaceName": "eth0",
        "expectedIps": [
          "203.0.113.42"
        ],
        "observedIps": [
          "198.51.100.23"
        ],
        "missingIps": [
          "203.0.113.42"
        ],
        "unexpectedIps": [
          "198.51.100.23"
        ],
        "status": "mismatch",
        "actions": {
          "canRepair": {
            "allowed": true,
            "reason": null
          }
        }
      }
    ],
    "mismatches": [
      {
        "interfaceName": "net0",
        "mac": "52:54:00:12:34:56",
        "guestInterfaceName": "eth0",
        "expectedIps": [
          "203.0.113.42"
        ],
        "observedIps": [
          "198.51.100.23"
        ],
        "missingIps": [
          "203.0.113.42"
        ],
        "unexpectedIps": [
          "198.51.100.23"
        ],
        "status": "mismatch",
        "actions": {
          "canRepair": {
            "allowed": true,
            "reason": null
          }
        }
      }
    ],
    "expectedIps": [
      "203.0.113.42"
    ],
    "observedIps": [
      "198.51.100.23"
    ],
    "missingIps": [
      "203.0.113.42"
    ],
    "unexpectedIps": [
      "198.51.100.23"
    ],
    "actions": {
      "canRepair": {
        "allowed": true,
        "reason": null
      }
    }
  },
  "ipAvailability": {
    "ipv4": {
      "availableCount": 0,
      "currentNetworkAvailableCount": 0,
      "currentNetworkKnown": true,
      "reason": null
    },
    "ipv6": {
      "availableCount": 91,
      "currentNetworkAvailableCount": 0,
      "currentNetworkKnown": false,
      "reason": "No IPv6 subnet is currently attached to this VPS."
    }
  },
  "vlanTag": 112,
  "ipv6UpgradeOption": {
    "key": "ipv6Addresses",
    "name": "IPv6 addresses",
    "min": 0,
    "max": 16,
    "step": 1,
    "monthlyPrice": 0,
    "currencyCode": "SEK",
    "currentValue": 0
  },
  "privateNetworks": [
    {
      "parentCidr": "10.24.0.0/16",
      "status": "pending_switch",
      "subnets": [
        {
          "id": "subnet_01hxa3b4c5d6e7f8g9h0j1k2m3",
          "subnetCidr": "10.24.10.0/24",
          "vlanTag": 220,
          "gateway": "10.24.10.1",
          "status": "retired",
          "usage": {
            "assignedIpCount": 1,
            "totalIpCount": 250
          }
        }
      ]
    }
  ],
  "privateNetworkDefaults": {
    "vlanRange": {
      "min": 200,
      "max": 399
    }
  },
  "ipChangePolicy": {
    "monthlyLimit": 2,
    "usedThisPeriod": 0,
    "remaining": 2,
    "periodStart": "2026-05-01T00:00:00.000Z",
    "nextReset": "2026-06-01T00:00:00.000Z",
    "lastUsedAt": null,
    "canChangeNow": true,
    "blockedReason": null
  },
  "actions": {
    "canAddPublicInterface": {
      "allowed": false,
      "reason": "Your IPv4 limit has been reached. Enable IPv6 to add an IPv6 public interface."
    },
    "canAddIpv4": {
      "allowed": false,
      "reason": "Your plan's IPv4 limit has been reached."
    },
    "canAddIpv6": {
      "allowed": false,
      "reason": "No IPv6 subnet is currently attached to this VPS."
    },
    "canChangeIp": {
      "allowed": true,
      "reason": null
    },
    "canUpgradeIPv6": {
      "allowed": true,
      "reason": null
    },
    "canCreatePrivateNetwork": {
      "allowed": true,
      "reason": null
    }
  }
}