Preview or commit a VPS plan change. Get {id} from GET /api/v2/vps data[].id. First call GET /api/v2/vps/{id}/actions/upgrade; send availablePlans[].slug as productSlug. This route changes the plan only. To change option values such as bandwidthGb without changing plan, use `POST…
Preview or commit a VPS plan change. Get {id} from GET /api/v2/vps data[].id. First call GET /api/v2/vps/{id}/actions/upgrade; send availablePlans[].slug as productSlug. This route changes the plan only. To change option values such as bandwidthGb without changing plan, use POST /api/v2/vps/{id}/actions/config. Unsupported fields such as productId, resources, draftId, send, or estimate are rejected. By default, paid extra bandwidth above the current plan's included bandwidth is kept on top of the target plan. Send preserveExtraBandwidth: false only when the customer explicitly chooses to drop paid extra bandwidth; unused paid time is not credited back.
write:billing
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 productSlug string required
· Example: vps-sm Plan slug from `GET /api/v2/vps/{id}/actions/upgrade` `availablePlans[].slug`.
billingCycle string · enum
· Example: monthly Optional canonical billing cycle for the target plan.
monthly quarterly semiannually annually biennially triennially dryRun boolean
· Example: true When true, return pricing and payment availability without committing.
cancelExistingInvoice boolean
· Example: true Use only when a 409 `existing_invoice_blocking` response suggests resending with this flag.
preserveExtraBandwidth boolean
· Example: true Defaults to true. When the VPS currently has paid bandwidth above the included bandwidth of its current plan, keep that extra bandwidth on top of the target plan. Set false only when the customer explicitly chooses to drop paid extra bandwidth; unused paid time is not credited back.
dryRun boolean
· Example: true currentProduct object Compact current-product reference returned by VPS plan-change preview and commit responses.
currentProduct.id stringnull required
· Example: vpsprod_01hxa3b4c5d6e7f8g9h0j1k2m3 currentProduct.displayId stringnull required
· Example: null Human-display product identifier when one exists. VPS products usually return null; use `slug` for display and follow-up requests.
currentProduct.slug stringnull required
· Example: vps-xs currentProduct.name stringnull required
· Example: VPS XS paymentInvoice objectnull renewalInvoice objectnull actions object actions.canCommit object actions.canCommit.allowed boolean required
· Example: true actions.canCommit.reason stringnull required
· Example: null actions.canCommit.code stringnull
· Example: pending_order Machine-readable reason code when an action is blocked.
warnings array<object> Plan-change adjustments selected by the server, such as preserved storage, preserved paid extra bandwidth, or bandwidth raised to cover current-period usage.
warnings[].code string required
· Example: package_bandwidth_preserved Machine-readable adjustment code, for example `package_bandwidth_preserved`, `package_bandwidth_adjusted`, or `package_storage_preserved`.
warnings[].severity string · enum required
· Example: warning warning warnings[].resource string · enum required
· Example: bandwidth bandwidth storage warnings[].reason string required
· Example: This VPS currently has 10 TB extra bandwidth. We will keep that extra bandwidth on the ... Human-readable explanation safe to show to the customer.
warnings[].included object warnings[].included.value number required
· Example: 10240 Amount in the unit named by `unit`.
warnings[].included.unit string · enum required
· Example: GB GB warnings[].current object warnings[].current.value number required
· Example: 10240 Amount in the unit named by `unit`.
warnings[].current.unit string · enum required
· Example: GB GB warnings[].usage object warnings[].usage.value number required
· Example: 10240 Amount in the unit named by `unit`.
warnings[].usage.unit string · enum required
· Example: GB GB warnings[].adjusted object required warnings[].adjusted.value number required
· Example: 10240 Amount in the unit named by `unit`.
warnings[].adjusted.unit string · enum required
· Example: GB GB warnings[].extra object warnings[].extra.value number required
· Example: 10240 Amount in the unit named by `unit`.
warnings[].extra.unit string · enum required
· Example: GB GB 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 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 POST "https://cloud.hostup.se/api/v2/vps/vps_01hxa3b4c5d6e7f8g9h0j1k2m3/actions/upgrade" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{
"productSlug": "vps-sm",
"billingCycle": "monthly",
"dryRun": true
}' {
"dryRun": true,
"currentProduct": {
"id": "vpsprod_01hxa3b4c5d6e7f8g9h0j1k2m3",
"displayId": null,
"slug": "vps-xs",
"name": "VPS XS"
},
"paymentInvoice": {
"amount": 70,
"currencyCode": "SEK",
"paymentMethods": {
"card": {
"available": true,
"reason": null
},
"swish": {
"available": false,
"reason": "Swish is only available for SEK invoices. This invoice is EUR."
}
},
"availablePaymentMethods": [
"card",
"swish"
],
"actions": {
"canPayWithAvailableMethod": {
"allowed": true,
"reason": null
}
}
},
"renewalInvoice": null,
"actions": {
"canCommit": {
"allowed": true,
"reason": null
}
},
"warnings": []
} {
"productSlug": "vps-sm",
"billingCycle": "monthly",
"dryRun": true
}