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
idstringrequiredvps_…).Example
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.
{ "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
cancelledbooleantrue. One of true.scheduledChangeobjectstatusstringpreview, scheduled, awaiting_payment, paid, applying, applied, needs_attention, cancelling, cancelled.effectiveAtstring or nullinvoiceIssueAtstring or nulltargetobjectproductSlugstringresourcesobjectstorageGb can be larger than the new plan’s disk. The primary disk cannot be made smaller.billingobjectamountnumber or nullcurrencyCodestringbillingCyclestringmonthly, quarterly, semiannually, annually, biennially, triennially, free.actionsobjectcanCancelobjectallowedbooleanreasonstring or nullallowed is true.renewalInvoicenullnull.Errors
Errors are Problem Details with a stable code. Branch on the code, not on the text.
| 400 | Invalid request. The response body is an RFC 7807 Problem Details document. |
| 401 | Unauthorized. Authentication is required. |
| 403 | Forbidden. The caller lacks a required scope or does not own the resource. |
| 404 | Nothing is scheduled for this VPS (scheduled_change_not_found). |
| 409 | The 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. |
| 429 | Rate limited. Retry after the limit resets. 429 responses include Retry-After seconds plus X-RateLimit-* headers. |
| 500 | Internal error. Retry later or contact support if the issue persists. |
| 502 | Upstream failure. A dependent provider request failed; the Problem Details code is upstream_failed. Retry later or contact support if the issue persists. |