Create Cloud VPS private network

POST /api/v2/private-networks

Create a private network for Cloud VPS workflows.

Private networks span the entire HostUp network, so VPS in any location can be attached.

name is required and must be 100 characters or fewer; longer names are rejected with 400.

parentCidr is optional; when supplied it must be a /21 inside the private allocation range, otherwise the request fails with 400 invalid_cidr.

If omitted, the server auto-assigns the parent range.

A first /24 subnet is always created, whether or not parentCidr was supplied.

Private networking requires a one-time setup fee: until it is enabled for the account, this endpoint responds 402 private_network_setup_required; pay the setup invoice referenced in the problem details from the billing area and retry.

Authentication

Required API scope: write:network

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

Context

Headers

Authorization Bearer <token>
Accept application/json
Content-Type application/json

Body

required
application/json
name string required · Example: production-private
region string deprecated

Deprecated — omit this field. Private networks span the entire HostUp network. Non-default values are not supported and a network created with one may not appear in list responses.

description string · nullable · Example: Private backend network

parentCidr string · Example: 10.201.64.0/21

Responses

201 Private network created.
id string required · Example: pnet_01hxa3b4c5d6e7f8g9h0j1k2m3
name string required · Example: production-private
parentCidr string required · Example: 10.201.64.0/21
region string deprecated required · Example: dc1r28

Internal placement identifier; safe to ignore. Private networks span the entire HostUp network.

status string · enum required · Example: active
provisioning
active
deprovisioning
retired
unknown
subnetCount number required · Example: 1
attachedVpsCount number required · Example: 0
subnets array<object> required
subnets[].id string required · Example: subnet_01hxa3b4c5d6e7f8g9h0j1k2m3
subnets[].subnetCidr string required · Example: 10.201.64.0/24
subnets[].vlanTag number · nullable required · Example: 253

Nullable: may be null when not applicable.

subnets[].gateway string · nullable required · Example: 10.201.64.1

Nullable: may be null when not applicable.

subnets[].status string · enum required · Example: active
provisioning
active
deprovisioning
retired
unknown
attachedVps array<object> required
attachedVps[].id string required · Example: vps_01hxa3b4c5d6e7f8g9h0j1k2m3
attachedVps[].name string required · Example: web-01
attachedVps[].primaryIp string · nullable required · Example: 203.0.113.10

Nullable: may be null when not applicable.

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

Nullable: may be null when not applicable.

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

Nullable: may be null when not applicable.

createdAt string required · Example: 2026-04-27T12:00:00.000Z
unusedAddressReservationCount number required · Example: 0

Count of stale reserved private addresses that are not attached to an owned VPS. Always 0 on a freshly created network.

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
402 Private networking is not enabled for the account yet. The problem document uses code private_network_setup_required and, when a setup invoice is already pending, references that invoice; pay the one-time setup fee from the billing area and retry.
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
409 The request conflicts with existing allocations: cidr_overlap when the requested parentCidr is already in use (omit parentCidr to let the server auto-assign), network_limit_reached when the account's private-network limit is reached (contact support for an increase), or no_vlan_available when the VLAN pool is exhausted.
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
POST https://cloud.hostup.se/api/v2/private-networks
For AI assistants
View as Markdown
cURL
curl -X POST "https://cloud.hostup.se/api/v2/private-networks" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "production-private",
    "description": "Private backend network"
  }'
Response
{
  "id": "pnet_01hxa3b4c5d6e7f8g9h0j1k2m3",
  "name": "production-private",
  "parentCidr": "10.201.64.0/21",
  "region": "dc1r28",
  "status": "provisioning",
  "subnetCount": 1,
  "attachedVpsCount": 0,
  "subnets": [
    {
      "id": "subnet_01hxa3b4c5d6e7f8g9h0j1k2m3",
      "subnetCidr": "10.201.64.0/24",
      "vlanTag": 253,
      "gateway": "10.201.64.1",
      "status": "provisioning"
    }
  ],
  "attachedVps": [],
  "actions": {
    "canDelete": {
      "allowed": false,
      "reason": "Retire all child subnets before deleting."
    },
    "canAddSubnet": {
      "allowed": false,
      "reason": "Private network limit reached."
    }
  },
  "createdAt": "2026-04-27T12:00:00.000Z",
  "unusedAddressReservationCount": 0
}
Request Body Create with automatic CIDR allocation
{
  "name": "production-private",
  "description": "Private backend network"
}