Reinstall a VPS
Deferred Asynchronous · 202
POST
/api/v1/
operationIdpostServerRebuild
- Required level
- Full
- Rate limit
- heavy operations, 6 calls per hour per VPS (60 per account)
Reinstalls the operating system. All disk content is destroyed (files, configuration, accounts), with no way back: anything not in a backup or a snapshot is lost.
The os / variant pair is taken as is from GET /catalog/os-templates. The VPS memory is compared with the template's minimum before any action: a reinstallation that would leave a machine unable to boot is rejected with 409.
Passwords are generated, not chosen, and returned only once in this response: root_password always, plus app_password for an application variant (variant other than default). They take effect when the reinstalled system starts.
ssh_key_ids replaces the keys to install on the rebuilt machine. An identifier that does not belong to the account installs nothing. A weak key is refused (400), before any action.
This request is processed in the background: it answers immediately while the work continues. Follow it with the task or request endpoints.
Path parameters
-
vmidstring required -
Identifier of the VPS. It must belong to the account and be within the key's scope.
Request body
application/json
-
osstringrequiredosfield of an entry fromGET /catalog/os-templates -
variantstringoptionalvariantfield of the same entry -
ssh_key_idsstring[]optionalAccount keys to install. Missing or empty: this call leaves keys untouched.
Example request
{
"os": "debian-12",
"variant": "default",
"ssh_key_ids": [
"45"
]
}
Responses
202
Reinstallation queued; passwords returned only once
The request was accepted, not completed. The response carries a task to follow.
{
"data": {
"tasks": [
{
"id": "tsk_000002e1",
"status": "pending",
"action": "server.rebuild",
"vmid": "116807",
"description": "Réinstallation du serveur VPS-116807 avec le template Debian 12",
"created_at": "2026-08-20T14:31:02+02:00",
"finished_at": null
}
],
"root_password": "shfKvbnERTUP2345",
"effective_after_reboot": true
}
}
Response fields 12
-
dataobject -
tasksobject[] -
idstringOpaque identifier
-
statusstringunknownwould indicate a state the API cannot name -
actionstringType of task
-
vmidstring -
descriptionstring -
created_atstring (date-time) -
finished_atstring (date-time)nullwhile the task is running -
root_passwordstringGenerated root password, returned only once
-
app_passwordstringApplication password, for a variant other than
default -
effective_after_rebootboolean
400
Invalid parameters: validation_failed — os missing, or os / variant pair not in the catalog; validation_failed — key in ssh_key_ids flagged weak.
validation_failed — os missing, or os / variant pair not in the catalog; validation_failed — key in ssh_key_ids flagged weak.os missing, or os / variant pair not in the catalog
{
"type": "https://docs.lws.fr/kvm/errors/validation-failed",
"title": "Paramètres invalides",
"status": 400,
"code": "validation_failed",
"detail": "Aucun système ne correspond à ce couple os / variant.",
"request_id": "3f9a1c07b2e45d18",
"errors": {
"os": "Reprenez un couple os / variant de /catalog/os-templates."
}
}
key in ssh_key_ids flagged weak
{
"type": "https://docs.lws.fr/kvm/errors/validation-failed",
"title": "Paramètres invalides",
"status": 400,
"code": "validation_failed",
"detail": "La clé SSH 45 ne respecte plus les critères actuels (type reconnu, RSA d'au moins 2048 bits) : elle ne peut pas être posée à la réinstallation.",
"request_id": "3f9a1c07b2e45d18",
"errors": {
"ssh_key_ids": "Retirez la clé 45, ou remplacez-la par une clé conforme."
}
}
Response fields 18
-
typestring (uri)required -
titlestringrequiredShort title, in French
-
statusinteger (int64)requiredHTTP status
-
codestringrequiredStable machine-readable code (see "Errors" in Getting started)
-
detailstringrequiredDetailed message, in French
-
request_idstringrequiredIdentifier of the request, to give to support
-
errorsobjectvalidation_failed: message per faulty parameter -
required_levelstringinsufficient_scope: level required by the operation -
task_idstringtask_already_running: task running on this VPS -
familystringrate_limited: exhausted rate limit family -
limitinteger (int64)rate_limited: hourly limit of the family -
retry_afterinteger (int64)rate_limited: seconds to wait -
lockstringserver_locked: lock set by the hypervisor (backup,snapshot,suspended…) -
reasonstringserver_locked:operation_in_progress, an operation is running, retry afterRetry-After;suspended, the VPS is hibernating, start it first;support_notified, abnormal lock, the LWS team has been notified and is taking care of it -
maintenanceobjectserver_maintenance: nature of the intervention, start and expected end (nullfor an incident) -
kindstring -
started_atstring (date-time) -
expected_endstring (date-time)
401
Authentication refused: invalid_token — Authorization header missing or malformed, or unknown key; access_disabled — API access turned off for this account, or API service temporarily turned off by LWS.
invalid_token — Authorization header missing or malformed, or unknown key; access_disabled — API access turned off for this account, or API service temporarily turned off by LWS.Authorization header missing or malformed, or unknown key
{
"type": "https://docs.lws.fr/kvm/errors/invalid-token",
"title": "Authentification invalide",
"status": 401,
"code": "invalid_token",
"detail": "Clé inconnue ou révoquée.",
"request_id": "3f9a1c07b2e45d18"
}
API access turned off for this account, or API service temporarily turned off by LWS
{
"type": "https://docs.lws.fr/kvm/errors/access-disabled",
"title": "Accès API désactivé",
"status": 401,
"code": "access_disabled",
"detail": "L'accès API est désactivé pour ce compte. Réactivez-le depuis la page « API / MCP » du panel.",
"request_id": "3f9a1c07b2e45d18"
}
Response fields 18
-
typestring (uri)required -
titlestringrequiredShort title, in French
-
statusinteger (int64)requiredHTTP status
-
codestringrequiredStable machine-readable code (see "Errors" in Getting started)
-
detailstringrequiredDetailed message, in French
-
request_idstringrequiredIdentifier of the request, to give to support
-
errorsobjectvalidation_failed: message per faulty parameter -
required_levelstringinsufficient_scope: level required by the operation -
task_idstringtask_already_running: task running on this VPS -
familystringrate_limited: exhausted rate limit family -
limitinteger (int64)rate_limited: hourly limit of the family -
retry_afterinteger (int64)rate_limited: seconds to wait -
lockstringserver_locked: lock set by the hypervisor (backup,snapshot,suspended…) -
reasonstringserver_locked:operation_in_progress, an operation is running, retry afterRetry-After;suspended, the VPS is hibernating, start it first;support_notified, abnormal lock, the LWS team has been notified and is taking care of it -
maintenanceobjectserver_maintenance: nature of the intervention, start and expected end (nullfor an incident) -
kindstring -
started_atstring (date-time) -
expected_endstring (date-time)
403
Access denied: insufficient_scope — key level too low; ip_not_allowed — calling address not authorized.
insufficient_scope — key level too low; ip_not_allowed — calling address not authorized.key level too low
{
"type": "https://docs.lws.fr/kvm/errors/insufficient-scope",
"title": "Droits insuffisants",
"status": 403,
"code": "insufficient_scope",
"detail": "Niveau de permission « full » requis.",
"request_id": "3f9a1c07b2e45d18",
"required_level": "full"
}
calling address not authorized
{
"type": "https://docs.lws.fr/kvm/errors/ip-not-allowed",
"title": "Adresse non autorisée",
"status": 403,
"code": "ip_not_allowed",
"detail": "L'adresse 203.0.113.10 ne figure pas parmi les adresses autorisées de ce compte.",
"request_id": "3f9a1c07b2e45d18"
}
Response fields 18
-
typestring (uri)required -
titlestringrequiredShort title, in French
-
statusinteger (int64)requiredHTTP status
-
codestringrequiredStable machine-readable code (see "Errors" in Getting started)
-
detailstringrequiredDetailed message, in French
-
request_idstringrequiredIdentifier of the request, to give to support
-
errorsobjectvalidation_failed: message per faulty parameter -
required_levelstringinsufficient_scope: level required by the operation -
task_idstringtask_already_running: task running on this VPS -
familystringrate_limited: exhausted rate limit family -
limitinteger (int64)rate_limited: hourly limit of the family -
retry_afterinteger (int64)rate_limited: seconds to wait -
lockstringserver_locked: lock set by the hypervisor (backup,snapshot,suspended…) -
reasonstringserver_locked:operation_in_progress, an operation is running, retry afterRetry-After;suspended, the VPS is hibernating, start it first;support_notified, abnormal lock, the LWS team has been notified and is taking care of it -
maintenanceobjectserver_maintenance: nature of the intervention, start and expected end (nullfor an incident) -
kindstring -
started_atstring (date-time) -
expected_endstring (date-time)
404
Resource not found: vm_not_found — VPS does not exist or is outside the key's scope.
vm_not_found — VPS does not exist or is outside the key's scope.{
"type": "https://docs.lws.fr/kvm/errors/vm-not-found",
"title": "VPS introuvable",
"status": 404,
"code": "vm_not_found",
"detail": "Aucun VPS 999999 sur ce compte.",
"request_id": "3f9a1c07b2e45d18"
}
Response fields 18
-
typestring (uri)required -
titlestringrequiredShort title, in French
-
statusinteger (int64)requiredHTTP status
-
codestringrequiredStable machine-readable code (see "Errors" in Getting started)
-
detailstringrequiredDetailed message, in French
-
request_idstringrequiredIdentifier of the request, to give to support
-
errorsobjectvalidation_failed: message per faulty parameter -
required_levelstringinsufficient_scope: level required by the operation -
task_idstringtask_already_running: task running on this VPS -
familystringrate_limited: exhausted rate limit family -
limitinteger (int64)rate_limited: hourly limit of the family -
retry_afterinteger (int64)rate_limited: seconds to wait -
lockstringserver_locked: lock set by the hypervisor (backup,snapshot,suspended…) -
reasonstringserver_locked:operation_in_progress, an operation is running, retry afterRetry-After;suspended, the VPS is hibernating, start it first;support_notified, abnormal lock, the LWS team has been notified and is taking care of it -
maintenanceobjectserver_maintenance: nature of the intervention, start and expected end (nullfor an incident) -
kindstring -
started_atstring (date-time) -
expected_endstring (date-time)
409
Conflict with the current state: invalid_state — VPS memory below the system's minimum, or VPS missing from its hypervisor's database; task_already_running — a reinstallation is already running; service_suspended — VPS disabled or expired: only read operations remain possible; server_locked — VPS locked by the hypervisor, see reason; with operation_in_progress, Retry-After gives the recommended wait.
invalid_state — VPS memory below the system's minimum, or VPS missing from its hypervisor's database; task_already_running — a reinstallation is already running; service_suspended — VPS disabled or expired: only read operations remain possible; server_locked — VPS locked by the hypervisor, see reason; with operation_in_progress, Retry-After gives the recommended wait.VPS memory below the system's minimum, or VPS missing from its hypervisor's database
{
"type": "https://docs.lws.fr/kvm/errors/invalid-state",
"title": "Opération impossible en l'état",
"status": 409,
"code": "invalid_state",
"detail": "Ce système demande au moins 7 Go de mémoire ; ce VPS en dispose de 4.",
"request_id": "3f9a1c07b2e45d18"
}
a reinstallation is already running
{
"type": "https://docs.lws.fr/kvm/errors/task-already-running",
"title": "Opération déjà en cours",
"status": 409,
"code": "task_already_running",
"detail": "Une réinstallation est déjà en cours sur ce VPS. Attendez qu'elle aboutisse.",
"request_id": "3f9a1c07b2e45d18",
"task_id": "tsk_000002d5"
}
VPS disabled or expired: only read operations remain possible
{
"type": "https://docs.lws.fr/kvm/errors/service-suspended",
"title": "Service suspendu",
"status": 409,
"code": "service_suspended",
"detail": "Le VPS 116807 est expiré.",
"request_id": "3f9a1c07b2e45d18"
}
VPS locked by the hypervisor, see reason; with operation_in_progress, Retry-After gives the recommended wait
{
"type": "https://docs.lws.fr/kvm/errors/server-locked",
"title": "Serveur verrouillé",
"status": 409,
"code": "server_locked",
"detail": "Action impossible pour le moment : une sauvegarde est en cours sur le serveur. Réessayez dans quelques minutes.",
"request_id": "3f9a1c07b2e45d18",
"lock": "snapshot",
"reason": "operation_in_progress"
}
Response fields 18
-
typestring (uri)required -
titlestringrequiredShort title, in French
-
statusinteger (int64)requiredHTTP status
-
codestringrequiredStable machine-readable code (see "Errors" in Getting started)
-
detailstringrequiredDetailed message, in French
-
request_idstringrequiredIdentifier of the request, to give to support
-
errorsobjectvalidation_failed: message per faulty parameter -
required_levelstringinsufficient_scope: level required by the operation -
task_idstringtask_already_running: task running on this VPS -
familystringrate_limited: exhausted rate limit family -
limitinteger (int64)rate_limited: hourly limit of the family -
retry_afterinteger (int64)rate_limited: seconds to wait -
lockstringserver_locked: lock set by the hypervisor (backup,snapshot,suspended…) -
reasonstringserver_locked:operation_in_progress, an operation is running, retry afterRetry-After;suspended, the VPS is hibernating, start it first;support_notified, abnormal lock, the LWS team has been notified and is taking care of it -
maintenanceobjectserver_maintenance: nature of the intervention, start and expected end (nullfor an incident) -
kindstring -
started_atstring (date-time) -
expected_endstring (date-time)
429
Rate limit exceeded: rate_limited — hourly limit of the family exhausted.
rate_limited — hourly limit of the family exhausted.{
"type": "https://docs.lws.fr/kvm/errors/rate-limited",
"title": "Quota dépassé",
"status": 429,
"code": "rate_limited",
"detail": "Quota dépassé pour les opérations de type « heavy » sur le VPS 116807 : 6 appels par heure. Réessayez dans 214 seconde(s).",
"request_id": "3f9a1c07b2e45d18",
"family": "heavy",
"limit": 6,
"retry_after": 214
}
Response fields 18
-
typestring (uri)required -
titlestringrequiredShort title, in French
-
statusinteger (int64)requiredHTTP status
-
codestringrequiredStable machine-readable code (see "Errors" in Getting started)
-
detailstringrequiredDetailed message, in French
-
request_idstringrequiredIdentifier of the request, to give to support
-
errorsobjectvalidation_failed: message per faulty parameter -
required_levelstringinsufficient_scope: level required by the operation -
task_idstringtask_already_running: task running on this VPS -
familystringrate_limited: exhausted rate limit family -
limitinteger (int64)rate_limited: hourly limit of the family -
retry_afterinteger (int64)rate_limited: seconds to wait -
lockstringserver_locked: lock set by the hypervisor (backup,snapshot,suspended…) -
reasonstringserver_locked:operation_in_progress, an operation is running, retry afterRetry-After;suspended, the VPS is hibernating, start it first;support_notified, abnormal lock, the LWS team has been notified and is taking care of it -
maintenanceobjectserver_maintenance: nature of the intervention, start and expected end (nullfor an incident) -
kindstring -
started_atstring (date-time) -
expected_endstring (date-time)
502
Dependency unreachable: hypervisor_unreachable; upstream_unavailable — catalog, SSH keys or reinstallation queue unavailable.
hypervisor_unreachable; upstream_unavailable — catalog, SSH keys or reinstallation queue unavailable.Hypervisor unreachable
{
"type": "https://docs.lws.fr/kvm/errors/hypervisor-unreachable",
"title": "Hyperviseur injoignable",
"status": 502,
"code": "hypervisor_unreachable",
"detail": "L'hyperviseur hébergeant ce VPS n'a pas répondu. Réessayez dans quelques instants.",
"request_id": "3f9a1c07b2e45d18"
}
catalog, SSH keys or reinstallation queue unavailable
{
"type": "https://docs.lws.fr/kvm/errors/upstream-unavailable",
"title": "Service momentanément indisponible",
"status": 502,
"code": "upstream_unavailable",
"detail": "La demande de réinstallation n'a pas pu être enregistrée. Réessayez dans quelques instants.",
"request_id": "3f9a1c07b2e45d18"
}
Response fields 18
-
typestring (uri)required -
titlestringrequiredShort title, in French
-
statusinteger (int64)requiredHTTP status
-
codestringrequiredStable machine-readable code (see "Errors" in Getting started)
-
detailstringrequiredDetailed message, in French
-
request_idstringrequiredIdentifier of the request, to give to support
-
errorsobjectvalidation_failed: message per faulty parameter -
required_levelstringinsufficient_scope: level required by the operation -
task_idstringtask_already_running: task running on this VPS -
familystringrate_limited: exhausted rate limit family -
limitinteger (int64)rate_limited: hourly limit of the family -
retry_afterinteger (int64)rate_limited: seconds to wait -
lockstringserver_locked: lock set by the hypervisor (backup,snapshot,suspended…) -
reasonstringserver_locked:operation_in_progress, an operation is running, retry afterRetry-After;suspended, the VPS is hibernating, start it first;support_notified, abnormal lock, the LWS team has been notified and is taking care of it -
maintenanceobjectserver_maintenance: nature of the intervention, start and expected end (nullfor an incident) -
kindstring -
started_atstring (date-time) -
expected_endstring (date-time)
503
Host server under intervention: server_maintenance — host server under an intervention announced by LWS and unreachable; honor Retry-After.
server_maintenance — host server under an intervention announced by LWS and unreachable; honor Retry-After.{
"type": "https://docs.lws.fr/kvm/errors/server-maintenance",
"title": "Intervention en cours sur le serveur hôte",
"status": 503,
"code": "server_maintenance",
"detail": "Le serveur hébergeant ce VPS fait l'objet d'une intervention programmée par LWS : il est momentanément inaccessible. Fin prévue : 2026-10-21T18:00:00+02:00.",
"request_id": "3f9a1c07b2e45d18",
"maintenance": {
"kind": "works",
"started_at": "2026-10-21T14:00:00+02:00",
"expected_end": "2026-10-21T18:00:00+02:00"
}
}
Response fields 18
-
typestring (uri)required -
titlestringrequiredShort title, in French
-
statusinteger (int64)requiredHTTP status
-
codestringrequiredStable machine-readable code (see "Errors" in Getting started)
-
detailstringrequiredDetailed message, in French
-
request_idstringrequiredIdentifier of the request, to give to support
-
errorsobjectvalidation_failed: message per faulty parameter -
required_levelstringinsufficient_scope: level required by the operation -
task_idstringtask_already_running: task running on this VPS -
familystringrate_limited: exhausted rate limit family -
limitinteger (int64)rate_limited: hourly limit of the family -
retry_afterinteger (int64)rate_limited: seconds to wait -
lockstringserver_locked: lock set by the hypervisor (backup,snapshot,suspended…) -
reasonstringserver_locked:operation_in_progress, an operation is running, retry afterRetry-After;suspended, the VPS is hibernating, start it first;support_notified, abnormal lock, the LWS team has been notified and is taking care of it -
maintenanceobjectserver_maintenance: nature of the intervention, start and expected end (nullfor an incident) -
kindstring -
started_atstring (date-time) -
expected_endstring (date-time)