Return available plan changes and current configurable resource options for one VPS. Get {id} from GET /api/v2/vps data[].id. Use availablePlans[].slug with POST /api/v2/vps/{id}/actions/upgrade when changing plan. Use configurableOptions[].key with POST /api/v2/vps/{id}/actions/config when changing only…
Return available plan changes and current configurable resource options for one VPS. Get {id} from GET /api/v2/vps data[].id. Use availablePlans[].slug with POST /api/v2/vps/{id}/actions/upgrade when changing plan. Use configurableOptions[].key with POST /api/v2/vps/{id}/actions/config when changing only options such as bandwidthGb, backupSlots, snapshotSlots, ipv4Count, or additionalStorageGb. Snapshot endpoints do not sell snapshot capacity directly; if GET /api/v2/vps/{id}/snapshots or /snapshot-schedules reports available: false or limits.totalSnapshots: 0, add snapshot slots here through snapshotSlots or change to a plan that includes snapshots.
read:vm
Use Authorization: Bearer <token> for API keys. Dashboard sessions may also use hostup_session.
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.
Accept Example Content-Type Example vpsId string
· Example: vps_01hxa3b4c5d6e7f8g9h0j1k2m3 currentProduct null configurableOptions array<object> Current product configurable options such as `bandwidthGb`, `backupSlots`, `ipv4Count`, or `additionalStorageGb`. To change only these values, use `POST /api/v2/vps/{id}/actions/config`, not `actions/upgrade`.
configurableOptions[].key string required
· Example: bandwidthGb Canonical resource option key accepted under `resources` by `POST /api/v2/vps/{id}/actions/config`.
configurableOptions[].label string required
· Example: Bandwidth configurableOptions[].type string · enum required
· Example: slider slider quantity toggle input select configurableOptions[].min number
· Example: 1024 configurableOptions[].max number
· Example: 10240 configurableOptions[].step number
· Example: 1024 configurableOptions[].default numberstringbooleannull
· Example: 2048 configurableOptions[].currentValue numberstringbooleannull required
· Example: 2048 configurableOptions[].unit stringnull
· Example: GB configurableOptions[].pricing array<object> configurableOptions[].includedAtBase numbernull
· Example: 2048 Option amount included by the current VPS plan before paid adjustments.
configurableOptions[].constraints object Runtime constraints. For bandwidth this can raise the effective minimum above the product minimum based on current usage.
configurableOptions[].constraints.min number
· Example: 2048 configurableOptions[].constraints.max number
· Example: 10240 configurableOptions[].constraints.step number
· Example: 1024 configurableOptions[].constraints.unit stringnull
· Example: GB configurableOptions[].constraints.currentValue numberstringbooleannull
· Example: 2048 configurableOptions[].constraints.effectiveMin number
· Example: 2048 configurableOptions[].constraints.effectiveMax number
· Example: 10240 configurableOptions[].constraints.usage object configurableOptions[].constraints.usage.bandwidthUsedGb number
· Example: 193.483 Current-period bandwidth already used, when it affects the minimum orderable bandwidth.
configurableOptions[].constraints.actions object configurableOptions[].constraints.actions.canDecrease object configurableOptions[].constraints.actions.canDecrease.allowed boolean required
· Example: true configurableOptions[].constraints.actions.canDecrease.reason stringnull required
· Example: null configurableOptions[].constraints.actions.canDecrease.code stringnull
· Example: pending_order Machine-readable reason code when an action is blocked.
configurableOptions[].constraints.actions.canIncrease object configurableOptions[].constraints.actions.canIncrease.allowed boolean required
· Example: true configurableOptions[].constraints.actions.canIncrease.reason stringnull required
· Example: null configurableOptions[].constraints.actions.canIncrease.code stringnull
· Example: pending_order Machine-readable reason code when an action is blocked.
configurableOptions[].actions object availablePlans array<object> availablePlans[].id stringnull required
· Example: vpsprod_01hxa3b4c5d6e7f8g9h0j1k2m3 availablePlans[].slug stringnull required
· Example: vps-sm Canonical plan slug to send as `productSlug` when changing plan.
availablePlans[].tier string required
· Example: sm availablePlans[].name stringnull required
· Example: VPS SM availablePlans[].resources object required availablePlans[].resources.cpuCores numbernull
· Example: 2 availablePlans[].resources.memoryGb numbernull
· Example: 4 availablePlans[].resources.storageGb numbernull
· Example: 80 availablePlans[].bandwidth object required availablePlans[].bandwidth.limitGb numbernull
· Example: 2048 availablePlans[].billing object required availablePlans[].billing.amount number
· Example: 149 availablePlans[].billing.currencyCode string
· Example: SEK availablePlans[].billing.billingCycle string
· Example: monthly availablePlans[].billingCycles array<object> required
· Example: [{"billingCycle":"monthly","amount":149,"currencyCode":"SEK","isPrimary":true,"setupAmo... availablePlans[].billingCycles[].billingCycle string
· Example: monthly availablePlans[].billingCycles[].amount number
· Example: 149 availablePlans[].billingCycles[].currencyCode string
· Example: SEK availablePlans[].billingCycles[].isPrimary boolean
· Example: true availablePlans[].billingCycles[].setupAmount numbernull
· Example: null One-time setup fee for this billing cycle. Null when no setup fee applies.
availablePlans[].availabilityStatus string · enum required
· Example: available available hidden out_of_stock availablePlans[].available boolean required
· Example: true availablePlans[].reason stringnull required
· Example: null availablePlans[].actions object required availablePlans[].actions.canApply object required availablePlans[].actions.canApply.allowed boolean required
· Example: true availablePlans[].actions.canApply.reason stringnull required
· Example: null availablePlans[].actions.canApply.code stringnull
· Example: pending_order Machine-readable reason code when an action is blocked.
actions object actions.canChangeProduct object required actions.canChangeProduct.allowed boolean required
· Example: true actions.canChangeProduct.reason stringnull required
· Example: null actions.canChangeProduct.code stringnull
· 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 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}/actions/upgrade curl -X GET "https://cloud.hostup.se/api/v2/vps/vps_01hxa3b4c5d6e7f8g9h0j1k2m3/actions/upgrade" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Accept: application/json" {
"vpsId": "vps_01hxa3b4c5d6e7f8g9h0j1k2m3",
"currentProduct": {
"id": "vpsprod_01hxa3b4c5d6e7f8g9h0j1k2m3",
"slug": "vps-xs",
"tier": "xs",
"name": "VPS XS",
"resources": {
"cpuCores": 1,
"memoryGb": 2,
"storageGb": 40
},
"bandwidth": {
"limitGb": 2048
},
"billing": {
"amount": 79,
"currencyCode": "SEK",
"billingCycle": "monthly"
},
"billingCycles": [
{
"billingCycle": "monthly",
"amount": 79,
"currencyCode": "SEK",
"isPrimary": true,
"setupAmount": null
}
],
"availabilityStatus": "hidden",
"available": false,
"reason": "This plan is not currently offered."
},
"configurableOptions": [
{
"key": "bandwidthGb",
"label": "Bandwidth",
"type": "slider",
"min": 2048,
"max": 10240,
"step": 1024,
"default": 2048,
"currentValue": 2048,
"unit": "GB",
"pricing": [
{
"billingCycle": "monthly",
"amount": 20,
"currencyCode": "SEK"
}
],
"constraints": {
"min": 2048,
"max": 10240,
"step": 1024,
"unit": "GB",
"currentValue": 2048,
"effectiveMin": 2048,
"effectiveMax": 10240,
"usage": {
"bandwidthUsedGb": 193.483
},
"actions": {
"canDecrease": {
"allowed": true,
"reason": null
},
"canIncrease": {
"allowed": true,
"reason": null
}
}
},
"includedAtBase": 2048,
"actions": {
"canDecrease": {
"allowed": true,
"reason": null
},
"canIncrease": {
"allowed": true,
"reason": null
}
}
},
{
"key": "additionalStorageGb",
"label": "Attachable Block Storage",
"type": "slider",
"min": 0,
"max": 1000,
"step": 10,
"default": 0,
"currentValue": 100,
"unit": "GB",
"pricing": [
{
"billingCycle": "monthly",
"amount": 30,
"currencyCode": "SEK"
}
],
"constraints": {
"min": 100,
"max": 1000,
"step": 10,
"unit": "GB",
"currentValue": 100,
"effectiveMin": 100,
"effectiveMax": 1000,
"actions": {
"canDecrease": {
"allowed": true,
"reason": null
},
"canIncrease": {
"allowed": true,
"reason": null
}
}
},
"includedAtBase": 100,
"actions": {
"canDecrease": {
"allowed": true,
"reason": null
},
"canIncrease": {
"allowed": true,
"reason": null
}
}
},
{
"key": "snapshotSlots",
"label": "Snapshot slots",
"type": "quantity",
"min": 0,
"max": 5,
"step": 1,
"default": 0,
"currentValue": 0,
"unit": "slots",
"pricing": [
{
"billingCycle": "monthly",
"amount": 10,
"currencyCode": "SEK"
}
],
"constraints": {
"min": 0,
"max": 5,
"step": 1,
"unit": "slots",
"currentValue": 0,
"effectiveMin": 0,
"effectiveMax": 5,
"actions": {
"canDecrease": {
"allowed": false,
"reason": "No snapshot slots are currently active."
},
"canIncrease": {
"allowed": true,
"reason": null
}
}
},
"includedAtBase": 0,
"actions": {
"canDecrease": {
"allowed": false,
"reason": "No snapshot slots are currently active."
},
"canIncrease": {
"allowed": true,
"reason": null
}
}
}
],
"availablePlans": [
{
"id": "vpsprod_01hxa3b4c5d6e7f8g9h0j1k2m4",
"slug": "vps-sm",
"tier": "sm",
"name": "VPS SM",
"resources": {
"cpuCores": 2,
"memoryGb": 4,
"storageGb": 80
},
"bandwidth": {
"limitGb": 4096
},
"billing": {
"amount": 149,
"currencyCode": "SEK",
"billingCycle": "monthly"
},
"billingCycles": [
{
"billingCycle": "monthly",
"amount": 149,
"currencyCode": "SEK",
"isPrimary": true,
"setupAmount": null
}
],
"availabilityStatus": "available",
"available": false,
"reason": "This plan is not currently offered.",
"actions": {
"canApply": {
"allowed": false,
"reason": "This plan is not currently offered."
}
}
}
],
"actions": {
"canChangeProduct": {
"allowed": true,
"reason": null
}
}
}