---
title: "Change the VPS plan in place (resize or NAT↔dedicated convert — the path name is historical). Data kept, one reboot. The prorated difference is charged from the balance now; convert_to_nat refunds the unused difference. Next renewal uses the new price."
method: POST
path: "/services/{id}/upgrade-to-dedicated"
---

# Change the VPS plan in place (resize or NAT↔dedicated convert — the path name is historical). Data kept, one reboot. The prorated difference is charged from the balance now; convert_to_nat refunds the unused difference. Next renewal uses the new price.

`POST /services/{id}/upgrade-to-dedicated`

## Request

- Base URL: `https://api.eqvps.com/api/v1/eqvps`
- URL: `https://api.eqvps.com/api/v1/eqvps/services/{id}/upgrade-to-dedicated`
- Auth: HTTP bearer

## Path parameters

- `id` string, required

## Request body

- object
  - `target_plan` integer, required: product_id from upgrade-options
  - `confirm` true, required

## Response `200`

{service_id, charged, new_price, message}

## Other responses

- `202`: Paid, queued: the server's host has no free room (or IPv4 for NAT → IP) for the new plan right now. queued: true, charged, unused_credit, new_cost, wait_reason (capacity | no_ip). The upgrade is applied automatically (one reboot then); the server is not moved to another host.
- `402`: Insufficient balance: {needed, balance, currency} — top up and retry
- `409`: reason upgrade_queued: an upgrade of this server is already paid and waiting to be applied; or operation_in_progress.
- `422`: Target plan is not an allowed change — pick from upgrade-options
- `502`: Resize/convert failed — you were not charged

---

[API](https://skmtc.dev/eqvps/apis/eqvps-api.md) · [All operations](https://skmtc.dev/eqvps/apis/eqvps-api/llms.txt) · [OpenAPI document](https://skmtc.dev/eqvps/apis/eqvps-api/revisions/2cbc15a2b088?raw)
