Allocate a routed IPv6 pool or route a subnet

Use action: "allocate_pool" to add the account-level /48 when the account has none yet. Use action: "create_route" with poolId, vpsId, and prefixLength to route a /48, /56, or /64 to a VPS. prefix is optional; when omitted, the server chooses the first available child prefix in the selected /48.

VPS Services VM

Authentication

Required API scope: write:network

Use Authorization: Bearer <token> for API keys. Dashboard sessions may also use hostup_session.

Context

Headers

Accept Example
Content-Type Example

Body

required
application/json
action string · enum · Example: create_route
allocate_pool
create_route
poolId string · Example: ripv6_01hxa3b4c5d6e7f8g9h0j1k2m3

Required for `create_route`. Use `pools[].id` from `GET /api/v2/routed-ipv6`.

vpsId string · Example: vps_01hxa3b4c5d6e7f8g9h0j1k2m5

Required for `create_route`. Use an eligible `destinations[].vpsId` value.

prefixLength integer · enum · Example: 64

Required for `create_route`; allowed child prefix length.

48
56
64
prefix string · Example: 2001:db8:1000:100::/56

Optional explicit child prefix. Omit it to let the server choose the first available prefix.

label string · Example: web subnet

Optional customer label for the route.

Responses

201 Updated routed IPv6 state.
available boolean · Example: true
reason stringnull · Example: null
allowedPrefixLengths array<integer> · Example: [48,56,64]
pools array<object>
pools[].id string required · Example: ripv6_01hxa3b4c5d6e7f8g9h0j1k2m3
pools[].parentCidr string required · Example: 2001:db8:1000::/48
pools[].prefixLength integer · enum required · Example: 48
48
pools[].status string · enum required · Example: active
active
pools[].allocatedAt stringnull required · Example: 2026-06-15T12:00:00.000Z
pools[].updatedAt stringnull required · Example: 2026-06-15T12:00:00.000Z
pools[].routes array<object> required
pools[].routes[].id string required · Example: ripv6rt_01hxa3b4c5d6e7f8g9h0j1k2m4
pools[].routes[].prefix string required · Example: 2001:db8:1000:10::/64
pools[].routes[].prefixLength integer · enum required · Example: 64
48
56
64
pools[].routes[].nextHop string required · Example: 2001:db8::10
pools[].routes[].label stringnull required · Example: web subnet
pools[].routes[].vpsId string required · Example: vps_01hxa3b4c5d6e7f8g9h0j1k2m5
pools[].routes[].vpsName string required · Example: web-01
pools[].routes[].status string · enum required · Example: active
active
pools[].routes[].allocatedAt stringnull required · Example: 2026-06-15T12:01:00.000Z
pools[].routes[].updatedAt stringnull required · Example: 2026-06-15T12:01:00.000Z
pools[].routes[].actions object required
pools[].routes[].actions.canDelete object required

Whether one routed IPv6 action is currently available.

pools[].routes[].actions.canDelete.allowed boolean required · Example: true
pools[].routes[].actions.canDelete.reason stringnull required · Example: null
pools[].actions object required
pools[].actions.canCreateRoute object required

Whether one routed IPv6 action is currently available.

pools[].actions.canCreateRoute.allowed boolean required · Example: true
pools[].actions.canCreateRoute.reason stringnull required · Example: null
pools[].actions.canRelease object required

Whether one routed IPv6 action is currently available.

pools[].actions.canRelease.allowed boolean required · Example: true
pools[].actions.canRelease.reason stringnull required · Example: null
destinations array<object>
destinations[].vpsId string required · Example: vps_01hxa3b4c5d6e7f8g9h0j1k2m5
destinations[].name string required · Example: web-01
destinations[].primaryIp stringnull required · Example: 192.0.2.10
destinations[].nextHop stringnull required · Example: 2001:db8::10
destinations[].serviceStatus string required · Example: active
destinations[].actions object required
destinations[].actions.canReceiveRoute object required

Whether one routed IPv6 action is currently available.

destinations[].actions.canReceiveRoute.allowed boolean required · Example: true
destinations[].actions.canReceiveRoute.reason stringnull required · Example: null
actions object
actions.canAllocatePool object required

Whether one routed IPv6 action is currently available.

actions.canAllocatePool.allowed boolean required · Example: true
actions.canAllocatePool.reason stringnull required · Example: null
actions.canCreateRoute object required

Whether one routed IPv6 action is currently available.

actions.canCreateRoute.allowed boolean required · Example: true
actions.canCreateRoute.reason stringnull required · Example: null
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
409 The account already has a routed /48, the requested prefix overlaps an existing route, or no capacity remains.

No response body

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/routed-ipv6
For AI assistants
View as Markdown
cURL
curl -X POST "https://cloud.hostup.se/api/v2/routed-ipv6" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{
    "action": "allocate_pool"
  }'
Response
{
  "available": true,
  "reason": null,
  "allowedPrefixLengths": [
    48,
    56,
    64
  ],
  "pools": [],
  "destinations": [],
  "actions": {
    "canAllocatePool": {
      "allowed": true,
      "reason": null
    },
    "canCreateRoute": {
      "allowed": false,
      "reason": "Add a routed /48 before creating routes."
    }
  }
}
Request Body Allocate an account /48
{
  "action": "allocate_pool"
}