Schedule VPS conversion to Cloud VPS

POST /api/v2/vps/{id}/actions/convert-to-cloud

Schedule a regular fixed-cycle VPS to become pay-as-you-go Cloud VPS at the end of its current paid period.

Send no request body.

The VPS stays on its current fixed plan until effectiveAt; the conversion does not issue a prorated refund or account credit.

Cancel an open conversion with DELETE /api/v2/vps/{id}/actions/upgrade.

Always call GET /api/v2/vps/{id}/actions/convert-to-cloud first and proceed only when available is true.

Blocked conversions return Problem Details with top-level extension field blockerReasons; has_unpaid_invoice is a 409 conflict, while account eligibility blockers such as no_card_on_file, not_verified, no_cloud_access, cpu_limit_exceeded, memory_limit_exceeded, storage_limit_exceeded, or instance_limit_exceeded are 403 responses.

If another scheduled service change is already open, the conversion fails with a generic 409 conflict without blockerReasons; the eligibility endpoint is where scheduled_change_in_progress appears as a blocker.

Resource-limit blockers mean the current fixed-cycle VPS would exceed the caller's Cloud VPS limits after conversion; request the relevant limit increase before retrying.

Cloud VPS Cloud VPS

Authentication

Required API scope: write:vm

Authenticate with an API key in the Authorization: Bearer <token> header.

Context

Path Parameters

id string required Example: vps_01hxa3b4c5d6e7f8g9h0j1k2m3

Public VPS ID. Get it from GET /api/v2/vps data[].id. Do not invent this value; use the exact ID returned by the referenced API response.

Headers

Authorization Bearer <token>
Accept application/json

Responses

200 Cloud VPS conversion scheduled for the current paid-period boundary.
converted boolean · enum required · Example: false
scheduled boolean · enum required · Example: true
true
effectiveAt string · nullable required · Example: 2026-08-11T00:00:00.000Z

scheduledChange null required
previousProductId string · nullable required · Example: vpsprod_01hxa3b4c5d6e7f8g9h0j1k2m3

Public product ID of the fixed-cycle VPS product before conversion.

newProductId string · nullable required · Example: vpsprod_01hya3b4c5d6e7f8g9h0j1k2m3

Public product ID of the PAYG Cloud VPS product after conversion.

400 Invalid request. The response body is an RFC 7807 Problem Details document.
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
401 Unauthorized. Authentication is required.
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
403 Conversion is blocked by account eligibility or Cloud VPS resource limits.

No response body

404 Not found. The resource does not exist or is not owned by the caller.
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
409 Conversion is blocked. An unpaid invoice returns code has_unpaid_invoice with blockerReasons; an already-open scheduled service change returns a generic conflict without blockerReasons.
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
429 Rate limited. Retry after the limit resets. 429 responses include Retry-After seconds plus X-RateLimit-* headers.
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
500 Internal error. Retry later or contact support if the issue persists.
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
POST https://cloud.hostup.se/api/v2/vps/{id}/actions/convert-to-cloud
For AI assistants
View as Markdown
cURL
curl -X POST "https://cloud.hostup.se/api/v2/vps/vps_01hxa3b4c5d6e7f8g9h0j1k2m3/actions/convert-to-cloud" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Accept: application/json"
Response
{
  "converted": false,
  "scheduled": true,
  "effectiveAt": "2026-08-11T00:00:00.000Z",
  "scheduledChange": {
    "status": "scheduled",
    "effectiveAt": "2026-08-11T00:00:00.000Z",
    "invoiceIssueAt": "2026-07-28T00:00:00.000Z",
    "target": {
      "productSlug": "cloud-vm",
      "billing": {
        "amount": null,
        "currencyCode": "SEK",
        "billingCycle": "monthly"
      }
    },
    "actions": {
      "canCancel": {
        "allowed": true,
        "reason": null
      }
    }
  },
  "previousProductId": "vpsprod_01hxa3b4c5d6e7f8g9h0j1k2m3",
  "newProductId": "vpsprod_01hya3b4c5d6e7f8g9h0j1k2m3"
}