/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.
read:vm
Authenticate with an API key in the Authorization: Bearer <token> header.
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.
Authorization Bearer <token> Accept application/json 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.
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 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 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 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 Retry-After seconds plus X-RateLimit-* headers. 10 fields 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 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 https://cloud.hostup.se/api/v2/vps/{id}/network curl -X GET "https://cloud.hostup.se/api/v2/vps/vps_01hxa3b4c5d6e7f8g9h0j1k2m3/network" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Accept: application/json" {
"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
}
}
}