Retrieve the activity log
GET
/api/v1/
operationIdgetActivity
- Required level
- Read only
- Rate limit
- read, 3,600 calls per hour
History of the account's actions, from newest to oldest, across all channels (panel, api, mcp). It is how you find out afterwards what was done on your services, including what you did not do yourself.
action uses the same vocabulary as GET /tasks (server.rebuild in both), so that a task can be matched with its log entry. status is ok, error, or null for actions with no notion of success (a login, for example).
A key limited to certain VPS still sees the entries that do not concern any machine (logins, key regeneration, permission changes): these are the entries that would reveal fraudulent access. Use scope=servers to keep only actions on servers. A filter value outside the accepted list or an unreadable date is rejected, never ignored.
Query parameters
-
pageinteger optional -
Requested page. A value below 1 is raised to 1.
-
per_pageinteger optional -
Page size. A value above 100 is capped at 100; a zero, negative or non-numeric value falls back to 25.
-
scopestring optional -
all: everything;servers: actions on a machine;account: account actions. -
sourcestring optional -
Channel the action came from.
-
vmidstring optional -
Limit to one VPS.
-
actionstring optional -
Limit to one action code, for example
server.rebuild. -
sincestring (date-time) optional -
ISO 8601 date: only later entries are returned.
Responses
200
A page of the log
{
"data": [
{
"at": "2026-08-18T12:00:23+02:00",
"action": "server.rebuild",
"description": "Demande de réinstallation de la VM 107596 avec le template Forgejo",
"vmid": "107596",
"status": "ok",
"ip": "212.114.31.35",
"source": "panel"
},
{
"at": "2026-08-18T11:14:16+02:00",
"action": "user.login",
"description": "Connexion à la plateforme de gestion KVM",
"vmid": null,
"status": "ok",
"ip": "212.114.31.35",
"source": "panel"
}
],
"meta": {
"page": 1,
"per_page": 25,
"total": 887,
"total_pages": 36
}
}
Response fields 13
-
dataobject[]required -
atstring (date-time) -
actionstringAction code
-
descriptionstring -
vmidstringVPS concerned;
nullfor an account action -
statusstringnullfor an action with no notion of success -
ipstringOriginating address
-
sourcestringOriginating channel
-
metaobjectrequiredPagination. Non-paginated lists return everything and
metareflects the number returned. -
pageinteger (int64)Page returned
-
per_pageinteger (int64)Page size
-
totalinteger (int64)Total number of items
-
total_pagesinteger (int64)Total number of pages
400
Invalid parameters: validation_failed — scope or source not in the accepted list, or unreadable since.
validation_failed — scope or source not in the accepted list, or unreadable since.{
"type": "https://docs.lws.fr/kvm/errors/validation-failed",
"title": "Paramètres invalides",
"status": 400,
"code": "validation_failed",
"detail": "Paramètre « scope » invalide.",
"request_id": "3f9a1c07b2e45d18",
"errors": {
"scope": "Valeurs acceptées : all, servers, account."
}
}
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: ip_not_allowed — calling address not authorized.
ip_not_allowed — 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)
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 « read » : 3600 appels par heure. Réessayez dans 37 seconde(s).",
"request_id": "3f9a1c07b2e45d18",
"family": "read",
"limit": 3600,
"retry_after": 37
}
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: upstream_unavailable — VPS inventory temporarily unavailable.
upstream_unavailable — VPS inventory temporarily unavailable.{
"type": "https://docs.lws.fr/kvm/errors/upstream-unavailable",
"title": "Service momentanément indisponible",
"status": 502,
"code": "upstream_unavailable",
"detail": "Inventaire des VM indisponible.",
"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)