# change-server

Applies a change quote. Input is exactly the quote's `execution.input`: `serverId`, `changeQuoteId`, `minimumRemainingSeconds`.

## Routes

- **Purchase** (amount due > 0): request the payment challenge with `payerAddress` set to the owner wallet named in the quote; another wallet is refused before settlement. The order completes when the change is applied and returns the final receipt.
- **Owner action** (nothing due): run through `daski_use_asset`. The receipt `status: accepted` means the change was durably admitted; `get-server` shows when it completes. `status: refused` with a `refusal.code` (`quote_expired`, `stale_quote`, `minimum_time_unmet`, `operation_in_progress`, `server_held`) means nothing changed; request a fresh quote.

## Effect

The disk, IP, data and installed key are kept. A change keeps the server's CPU class (dedicated or burstable) unless the quote asks for the other with `cpu`. A different size stops the server, changes it and starts it again; paid time is paused during that interruption, so the result still meets `minimumRemainingSeconds`. The server counts as ready when it runs and passes its health checks; SSH is not probed, so a guest firewall or SSH change does not block the change. Applying the current configuration starts a server you stopped from the guest, with paid time paused the same way until it is ready, and a paid change restores a retained (expired) server, whose new term begins when it is ready. A paid request that can no longer be fulfilled (for example the server was deleted) goes to support for fulfillment or an authorized refund; deleted data cannot be restored.

## Result artifact — `server_change`

`{ serverId, operationId, changeQuoteId, route, status, refusal, amountPaid, resources, hourlyRate, minimumRemainingSeconds, remainingSeconds, paidThrough, next }`
