Event
The full set of /api/v1/events SSE event types.
The full set of /api/v1/events SSE event types.
Possible values: [job_progress, disk_state, container_state, notification, catalog]
- job_progress
- disk_state
- container_state
- notification
- catalog
data objectrequired
Every job type, each belonging to one of the mutually exclusive job classes.
Possible values: [sync, scrub, fix, check, rebalance, evacuation, share_relocation, mover, vm_disk_relocation, disk_format, disk_add, disk_remove, disk_replace, disk_upgrade_data, disk_upgrade_parity, pool_remount, migration_scan, migration_import, migration_verify, migration_parity, appdata_backup, appdata_restore, appdata_restore_preview, restore_drill, config_backup, container_update, container_recreate, stack_start, acme_issue, vm_start, vm_stop, vm_create, vm_delete, vm_snapshot, vm_clone, vm_migration_import]
The mutually exclusive job class the scheduler enforces.
Possible values: [parity, array_write, topology, service, vm]
interrupted is set on an in-flight job by a daemon restart and is never cleared automatically — resuming or re-running it is always an explicit user action.
Possible values: [queued, running, interrupted, succeeded, failed, cancelled]
Null when the job type or tool reports no meaningful percentage.
Possible values: >= 0 and <= 100
Whether this job type persists a checkpoint to resume from.
Whether the underlying tool honestly supports cancelling this job.
error object
- Error
- null
A stable, machine-readable identifier, e.g. job_not_found. Every auth-related operation can also return one of: setup_required (409 — no admin account exists yet; every operation but getSetupStatus/createFirstAdmin refuses with this while it's true), setup_complete (409, createFirstAdmin — an admin account already exists), rate_limited (429 — the account or source address is currently locked out after repeated failures; message gives a retry-after), too_busy (503 — the bounded password-hashing worker pool is saturated; safe to retry shortly), invalid_credentials (401, login — an unknown username or wrong password, deliberately indistinguishable), totp_required (401, login — the account has TOTP enrolled and no code was supplied), totp_invalid (401, login and confirmTotp — a code was supplied but is wrong, expired or already used; a missing login code is totp_required instead, never this), totp_reverify_required (403, enrollTotp — TOTP is already active and the caller didn't prove they still hold the account: no password or code was supplied, or the one supplied was wrong; 403 rather than 401 since the session itself is valid, only the reverification is missing or failed), totp_reverify_ambiguous (400, enrollTotp — TOTP is already active and both the current password and a current TOTP code were supplied; supply exactly one), totp_not_pending (409, confirmTotp — no pending secret to confirm), unauthorized (401 — no credential, or one that no longer validates), forbidden (403 — a valid credential whose role doesn't satisfy the operation), no_session (404 — the Unix socket's peer-credential-trusted local access has no signed-in user for an operation that needs one), request_too_large (413 — the request body exceeded the server's size limit), bad_request (400 — the request body could not be decoded), not_found (404 — no such API route), api_token_not_found (404, revokeApiToken — no token with that id), invalid_token_role (400, createApiToken — the requested role is neither admin nor viewer; share-only is never a valid token role), share_only_no_api_token (403, createApiToken — the target account has SMB/NFS access only and no API access at all) and token_role_exceeds_account (403, createApiToken — the requested role is wider than the target account's own role; a token can only narrow an account's access, never widen it).
A human-readable explanation, safe to show in the UI or CLI.
details object
Optional structured context, e.g. which field failed validation.
Optional structured context, e.g. which field failed validation.
data objectrequired
e.g. /dev/sdb — as reported, never accepted back as input.
wrong_filesystem is PoolDiskEntry-only: a disk matched to an array slot by identity (serial or WWN) whose filesystem UUID does not match what SQLite recorded for that slot — a replacement disk that kept the original disk's serial/WWN (a cloned or reused drive) but was formatted differently, or not at all. Distinct from missing: the disk is genuinely present, so the pool's own slot list must say so rather than report it active. The storage gate treats it exactly like a missing disk (not ready, no mount attempted for that slot) and never emits it on DiskStateEvent, since it is not a spindown state.
mount_failed is also PoolDiskEntry-only, and covers the case wrong_filesystem deliberately does not: a disk matched to a slot by identity whose filesystem UUID was never positively read at all — most commonly a genuinely blank same-serial replacement — so the storage gate's own identity/FSUUID check reports the array ready for it, but hoservad's own bounded attempt to mount that slot's disk still failed or timed out. Never derived from a device probe on this state's own read path — it reflects the daemon's last actual mount attempt, recorded when it happened. The web/CLI Replace disk flow offers this slot's own device as its only replacement target, the same way it does for wrong_filesystem; the replace job's own one-off probe of that exact device is what actually confirms it is blank before formatting it. Never emitted on DiskStateEvent, since it is not a spindown state.
Possible values: [active, standby, spinning_up, missing, failed, wrong_filesystem, mount_failed]
A container's state or health changed — sent when the Engine reports it (a start, die, pause, unpause or health check result, including a container killed from outside Hoserva) and when a start, stop, restart or recreate through the API finishes. state is the Engine's own vocabulary. health is present only when the event carries a health check result (or the container's health after an API action); a start, stop or die resets the check and the Engine's event omits it.
data objectrequired
The Docker Engine's own container state vocabulary.
Possible values: [created, running, paused, restarting, removing, exited, dead]
The container's HEALTHCHECK result, in the Engine's own vocabulary; none when the container defines no health check.
Possible values: [none, starting, healthy, unhealthy]
data objectrequired
The fixed event catalog, in its own order. Each event type has a compiled-in default severity, which can be overridden per event type.
Possible values: [smart_warning, smart_failure, disk_offline, array_degraded, sync_succeeded, sync_failed, sync_blocked_threshold, scrub_errors_found, pool_above_threshold, disk_near_minfreespace, cache_above_threshold, mover_skipping_files, config_drift_detected, container_unhealthy, container_update_available, hoserva_update_available, hoserva_update_failed, reboot_required, ups_on_battery, ups_battery_low, login_failure_burst, credential_reset, certificate_expiring, certificate_renewal_failed, config_backup_failed, appdata_backup_failed, backup_destination_stale, restore_drill_failed, catalog_check_failed]
Possible values: [info, warning, error, critical]
A catalog check finished, whether the background interval, check-on-open or refreshCatalog started it. data is the check's outcome, the same object refreshCatalog answers with.
data objectrequired
When the check finished.
How a catalog check ended.
Possible values: [updated, unchanged, failed]
Templates the new catalog lists that the replaced one did not. Present only when outcome is updated.
Possible values: >= 0
Templates both catalogs list under a different revision. Present only when outcome is updated.
Possible values: >= 0
Present only when outcome is failed. fetch_failed: the host could not be reached or answered something unusable (not notified). bad_signature: the signature does not verify against the catalog key. not_newer: the serial is not higher than the installed catalog's. bad_archive: the signed archive is not a catalog. install_failed: the verified archive could not be written to disk. The three verification reasons raise a catalog_check_failed notification.
Possible values: [fetch_failed, bad_signature, not_newer, bad_archive, install_failed]
Present only when outcome is failed.
{
"event": "job_progress",
"data": {
"id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"type": "sync",
"class": "parity",
"status": "queued",
"progress": 0,
"resumable": true,
"cancellable": true,
"createdAt": "2024-07-29T15:51:28.071Z",
"startedAt": "2024-07-29T15:51:28.071Z",
"finishedAt": "2024-07-29T15:51:28.071Z",
"error": {
"code": "string",
"message": "string",
"details": {}
}
}
}