Skip to content

Cancel a scheduled VPS change

DELETE /api/v2/vps/{id}/actions/upgrade

Cancel a change that waits for the next renewal of a VPS: a plan downgrade, a lower resource value or a switch to Cloud VPS. The pending change is scheduledChange on GET /api/v2/vps/{id}/actions/upgrade. Check scheduledChange.actions.canCancel there first.

The VPS keeps its current plan and resources. If the change had already replaced the renewal invoice, Hostup issues a renewal invoice for the current plan again. It comes back as renewalInvoice. When nothing is scheduled, the call returns 404 scheduled_change_not_found. Once the renewal has been paid the call returns 409 scheduled_change_not_cancellable. The same happens while the change is being applied.

Authentication: An API key with the scope write:billing. About keys and scopes

Request

Path parameters

idstringrequired
The VPS ID (vps_…).

Example

DELETE /api/v2/vps/{id}/actions/upgrade
curl -X DELETE "https://cloud.hostup.se/api/v2/vps/vps_01hxa3b4c5d6e7f8g9h0j1k2m3/actions/upgrade" \
-H "Authorization: Bearer $HOSTUP_API_KEY"

Responses

200 The scheduled change is cancelled.

Response 200
{
"cancelled": true,
"scheduledChange": {
"status": "cancelled",
"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": false,
"reason": "This change has already been cancelled."
}
}
},
"renewalInvoice": null
}
Response fields
cancelledboolean
Always true. One of true.
scheduledChangeobject
The cancelled change.
statusstring
One of preview, scheduled, awaiting_payment, paid, applying, applied, needs_attention, cancelling, cancelled.
effectiveAtstring or null
invoiceIssueAtstring or null
targetobject
productSlugstring
resourcesobject
The resources after the change, as checked by the server. For a VPS plan change storageGb can be larger than the new plan’s disk. The primary disk cannot be made smaller.
billingobject
amountnumber or null
currencyCodestring
billingCyclestring
One of monthly, quarterly, semiannually, annually, biennially, triennially, free.
actionsobject
canCancelobject
allowedboolean
True when the action can be called now.
reasonstring or null
Why the action is blocked, ready to show. Null when allowed is true.
renewalInvoicenull
The renewal invoice for the current plan when one was issued again. Otherwise null.

Errors

Errors are Problem Details with a stable code. Branch on the code, not on the text.

400Invalid request. The response body is an RFC 7807 Problem Details document.
401Unauthorized. Authentication is required.
403Forbidden. The caller lacks a required scope or does not own the resource.
404Nothing is scheduled for this VPS (scheduled_change_not_found).
409The change cannot be cancelled now (scheduled_change_not_cancellable). The renewal has been paid or the change is being applied. Another change may also be running.
429Rate limited. Retry after the limit resets. 429 responses include Retry-After seconds plus X-RateLimit-* headers.
500Internal error. Retry later or contact support if the issue persists.
502Upstream failure. A dependent provider request failed; the Problem Details code is upstream_failed. Retry later or contact support if the issue persists.