/api/v2/vps/{id}/actions/upgrade 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.
Payable upgrades return status: awaiting_payment and are applied after the invoice is paid; no-charge upgrades can return status: applied.
Downgrades are scheduled for the next paid-period boundary: the current plan stays active until scheduledChange.effectiveAt, no refund is issued for the current period, and the response has status: scheduled.
This route changes the plan only.
To change option values such as bandwidthGb without changing plan, use POST /api/v2/vps/{id}/actions/config.
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 for the next period.
Only one scheduled service change can exist at a time; cancel it with DELETE /api/v2/vps/{id}/actions/upgrade before selecting another change.
write:billing
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 Content-Type application/json 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 required
· Example: true status string · enum required preview changeKind string · enum required upgrade downgrade currentProduct object required Compact public product reference returned for the current and requested VPS plans.
currentProduct.id string · nullable required
· Example: vpsprod_01hxa3b4c5d6e7f8g9h0j1k2m3 Nullable: may be null when not applicable.
currentProduct.slug string · nullable required
· Example: vps-xs Nullable: may be null when not applicable.
currentProduct.name string · nullable required
· Example: VPS XS Nullable: may be null when not applicable.
newProduct object required Compact public product reference returned for the current and requested VPS plans.
newProduct.id string · nullable required
· Example: vpsprod_01hxa3b4c5d6e7f8g9h0j1k2m3 Nullable: may be null when not applicable.
newProduct.slug string · nullable required
· Example: vps-xs Nullable: may be null when not applicable.
newProduct.name string · nullable required
· Example: VPS XS Nullable: may be null when not applicable.
paymentInvoice null required renewalInvoice null required actions object required actions.canCommit object required actions.canCommit.allowed boolean required actions.canCommit.reason string · nullable required Nullable: may be null when not applicable.
scheduled boolean scheduledChange object scheduledChange.status string · enum required preview scheduled awaiting_payment paid applying applied needs_attention cancelling cancelled scheduledChange.effectiveAt string · nullable required Nullable: may be null when not applicable.
scheduledChange.invoiceIssueAt string · nullable required Nullable: may be null when not applicable.
scheduledChange.target object required scheduledChange.target.productSlug string scheduledChange.target.resources object scheduledChange.target.billing object required scheduledChange.target.billing.amount number · nullable required Nullable: may be null when not applicable.
scheduledChange.target.billing.currencyCode string required scheduledChange.target.billing.billingCycle string · enum required monthly quarterly semiannually annually biennially triennially free scheduledChange.actions object required scheduledChange.actions.canCancel object required scheduledChange.actions.canCancel.allowed boolean required scheduledChange.actions.canCancel.reason string · nullable required Nullable: may be null when not applicable.
warnings array<object> required 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, package_storage_preserved, or package_config_option_preserved.
warnings[].severity string · enum required
· Example: warning warning warnings[].resource string · enum required
· Example: bandwidth bandwidth storage backups snapshots ipv4 ipv6 attachableStorage 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 slots addresses 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 slots addresses 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 slots addresses 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 slots addresses 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 slots addresses status string · enum required scheduled awaiting_payment processing applied changeKind string · enum required upgrade downgrade currentProduct object required Compact public product reference returned for the current and requested VPS plans.
currentProduct.id string · nullable required
· Example: vpsprod_01hxa3b4c5d6e7f8g9h0j1k2m3 Nullable: may be null when not applicable.
currentProduct.slug string · nullable required
· Example: vps-xs Nullable: may be null when not applicable.
currentProduct.name string · nullable required
· Example: VPS XS Nullable: may be null when not applicable.
paymentInvoice null required renewalInvoice null required scheduled boolean scheduledChange object scheduledChange.status string · enum required preview scheduled awaiting_payment paid applying applied needs_attention cancelling cancelled scheduledChange.effectiveAt string · nullable required Nullable: may be null when not applicable.
scheduledChange.invoiceIssueAt string · nullable required Nullable: may be null when not applicable.
scheduledChange.target object required scheduledChange.target.productSlug string scheduledChange.target.resources object scheduledChange.target.billing object required scheduledChange.target.billing.amount number · nullable required Nullable: may be null when not applicable.
scheduledChange.target.billing.currencyCode string required scheduledChange.target.billing.billingCycle string · enum required monthly quarterly semiannually annually biennially triennially free scheduledChange.actions object required scheduledChange.actions.canCancel object required scheduledChange.actions.canCancel.allowed boolean required scheduledChange.actions.canCancel.reason string · nullable required Nullable: may be null when not applicable.
newProduct object required Compact public product reference returned for the current and requested VPS plans.
newProduct.id string · nullable required
· Example: vpsprod_01hxa3b4c5d6e7f8g9h0j1k2m3 Nullable: may be null when not applicable.
newProduct.slug string · nullable required
· Example: vps-xs Nullable: may be null when not applicable.
newProduct.name string · nullable required
· Example: VPS XS Nullable: may be null when not applicable.
invoiceLookupPending boolean
· Example: true True when the plan change committed and backend renewal invoice regeneration is still pending.
warnings array<object> required 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, package_storage_preserved, or package_config_option_preserved.
warnings[].severity string · enum required
· Example: warning warning warnings[].resource string · enum required
· Example: bandwidth bandwidth storage backups snapshots ipv4 ipv6 attachableStorage 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 slots addresses 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 slots addresses 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 slots addresses 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 slots addresses 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 slots addresses 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 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 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
}' // Immediate upgrade preview
{
"dryRun": true,
"status": "preview",
"changeKind": "upgrade",
"currentProduct": {
"id": "vpsprod_01hxa3b4c5d6e7f8g9h0j1k2m3",
"slug": "vps-xs",
"name": "VPS XS"
},
"newProduct": {
"id": "vpsprod_01j0b3c4d5e6f7g8h9j0k1m2n3",
"slug": "vps-sm",
"name": "VPS SM"
},
"paymentInvoice": {
"amount": 70,
"currencyCode": "SEK",
"servicePeriodEndAt": "2026-08-11T00:00:00.000Z"
},
"renewalInvoice": {
"amount": 149,
"currencyCode": "SEK"
},
"actions": {
"canCommit": {
"allowed": true,
"reason": null
}
},
"warnings": []
}
// Downgrade scheduled for the next paid period
{
"status": "scheduled",
"changeKind": "downgrade",
"scheduled": true,
"scheduledChange": {
"status": "scheduled",
"effectiveAt": "2026-08-11T00:00:00.000Z",
"invoiceIssueAt": "2026-07-28T00:00:00.000Z",
"target": {
"productSlug": "vps-xs",
"billing": {
"amount": 39,
"currencyCode": "SEK",
"billingCycle": "monthly"
}
},
"actions": {
"canCancel": {
"allowed": true,
"reason": null
}
}
},
"currentProduct": {
"id": "vpsprod_01j0b3c4d5e6f7g8h9j0k1m2n3",
"slug": "vps-sm",
"name": "VPS SM"
},
"newProduct": {
"id": "vpsprod_01hxa3b4c5d6e7f8g9h0j1k2m3",
"slug": "vps-xs",
"name": "VPS XS"
},
"paymentInvoice": null,
"renewalInvoice": null,
"warnings": []
} {
"productSlug": "vps-sm",
"billingCycle": "monthly",
"dryRun": true
}