iRetail PRO hub 1.0.0-m5: releases

22 operations

← All documentation · Source: contracts openapi/hub-v1.yaml at 8000474.

Releases the hub holds, rollouts in waves and the hub's own update (spec/RELEASES.md).

← iRetail PRO hub 1.0.0-m5

Operations

GET /v1/releases The releases the hub holds, the latest version first (spec/RELEASES.md, The hub's releases).

operationId listReleases · Permission release.read

Parameters

Name In Type Description
IRetail-App header string Which app sends the request, at which version: <app>/<version>, optionally a space and (<platform>), as cashier/1.2.0 (windows-x64) or manager/1.2.0 (web). The register (cashier), the back office and the console (manager) and the device gateway (gateway) send it on every request; a request without it is not one of the apps and is served as the current API, and a device token of an app's kind without it is an app of an unknown version; a header that does not parse counts as absent. The node may refuse an app 426 app_update_required by it, except on the operations marked x-app-update-exempt. Not a security boundary (spec/API.md, Transport; spec/RELEASES.md, Who is asking).
limit query integer
after query string The cursor of the previous page.

Responses

  • 200 OK object
  • 401 Error (spec/API.md). Error
  • 403 Error (spec/API.md). Error
GET /v1/releases/available What the source (IRETAIL_RELEASES_URL) offers as its latest release, and whether the hub holds it. 409 release_source_missing with downloading off, 503 release_source_unreachable when version.json cannot be read.

operationId getAvailableRelease · Permission release.read

Parameters

Name In Type Description
IRetail-App header string Which app sends the request, at which version: <app>/<version>, optionally a space and (<platform>), as cashier/1.2.0 (windows-x64) or manager/1.2.0 (web). The register (cashier), the back office and the console (manager) and the device gateway (gateway) send it on every request; a request without it is not one of the apps and is served as the current API, and a device token of an app's kind without it is an app of an unknown version; a header that does not parse counts as absent. The node may refuse an app 426 app_update_required by it, except on the operations marked x-app-update-exempt. Not a security boundary (spec/API.md, Transport; spec/RELEASES.md, Who is asking).

Responses

POST /v1/releases/download Download a release from the source. The manifest is read and verified before answering (422 release_refused); the artifacts follow in the background, each verified as it is stored. 200 for a version already held.

operationId downloadRelease · Permission release.manage

Parameters

Name In Type Description
IRetail-App header string Which app sends the request, at which version: <app>/<version>, optionally a space and (<platform>), as cashier/1.2.0 (windows-x64) or manager/1.2.0 (web). The register (cashier), the back office and the console (manager) and the device gateway (gateway) send it on every request; a request without it is not one of the apps and is served as the current API, and a device token of an app's kind without it is an app of an unknown version; a header that does not parse counts as absent. The node may refuse an app 426 app_update_required by it, except on the operations marked x-app-update-exempt. Not a security boundary (spec/API.md, Transport; spec/RELEASES.md, Who is asking).

Request body required

Responses

  • 200 Already held. Release
  • 202 Downloading; the release turns verified or failed. Release
  • 400 Error (spec/API.md). Error
  • 401 Error (spec/API.md). Error
  • 403 Error (spec/API.md). Error
  • 409 Error (spec/API.md). Error
  • 422 Error (spec/API.md). Error
  • 503 Error (spec/API.md). Error
POST /v1/releases/import Import a release bundle sent as the raw body (a POSIX tar, manifest.json first, then every artifact). Verified as it streams; 201 verified, 200 for the same manifest again, 409 release_conflict for another manifest of a version held, 422 release_refused with nothing kept.

Regular files only, at the top level, manifest.json first and at most 4 MiB, each other member named by an artifact, none twice; otherwise 400 bad_request with the reason and the member (spec/RELEASES.md, Importing a bundle).

operationId importRelease · Permission release.manage

Parameters

Name In Type Description
IRetail-App header string Which app sends the request, at which version: <app>/<version>, optionally a space and (<platform>), as cashier/1.2.0 (windows-x64) or manager/1.2.0 (web). The register (cashier), the back office and the console (manager) and the device gateway (gateway) send it on every request; a request without it is not one of the apps and is served as the current API, and a device token of an app's kind without it is an app of an unknown version; a header that does not parse counts as absent. The node may refuse an app 426 app_update_required by it, except on the operations marked x-app-update-exempt. Not a security boundary (spec/API.md, Transport; spec/RELEASES.md, Who is asking).

Request body required

  • application/x-tar string (binary)

Responses

  • 200 The same manifest is already held. Release
  • 201 Imported and verified. Release
  • 400 Error (spec/API.md). Error
  • 401 Error (spec/API.md). Error
  • 403 Error (spec/API.md). Error
  • 409 Error (spec/API.md). Error
  • 422 Error (spec/API.md). Error
GET /v1/releases/{version} One release the hub holds, with its signed manifest.

operationId getRelease · Permission release.read

Parameters

Name In Type Description
version required path string A release's version (spec/RELEASES.md).
IRetail-App header string Which app sends the request, at which version: <app>/<version>, optionally a space and (<platform>), as cashier/1.2.0 (windows-x64) or manager/1.2.0 (web). The register (cashier), the back office and the console (manager) and the device gateway (gateway) send it on every request; a request without it is not one of the apps and is served as the current API, and a device token of an app's kind without it is an app of an unknown version; a header that does not parse counts as absent. The node may refuse an app 426 app_update_required by it, except on the operations marked x-app-update-exempt. Not a security boundary (spec/API.md, Transport; spec/RELEASES.md, Who is asking).

Responses

DELETE /v1/releases/{version} Remove a release and its files from storage; 409 release_in_use while it is in use.

operationId deleteRelease · Permission release.manage

Parameters

Name In Type Description
version required path string A release's version (spec/RELEASES.md).
IRetail-App header string Which app sends the request, at which version: <app>/<version>, optionally a space and (<platform>), as cashier/1.2.0 (windows-x64) or manager/1.2.0 (web). The register (cashier), the back office and the console (manager) and the device gateway (gateway) send it on every request; a request without it is not one of the apps and is served as the current API, and a device token of an app's kind without it is an app of an unknown version; a header that does not parse counts as absent. The node may refuse an app 426 app_update_required by it, except on the operations marked x-app-update-exempt. Not a security boundary (spec/API.md, Transport; spec/RELEASES.md, Who is asking).

Responses

  • 204 Removed.
  • 401 Error (spec/API.md). Error
  • 403 Error (spec/API.md). Error
  • 404 Error (spec/API.md). Error
  • 409 Error (spec/API.md). Error
GET /v1/rollouts Rollouts, newest first (spec/RELEASES.md, Rollouts).

operationId listRollouts · Permission release.read

Parameters

Name In Type Description
IRetail-App header string Which app sends the request, at which version: <app>/<version>, optionally a space and (<platform>), as cashier/1.2.0 (windows-x64) or manager/1.2.0 (web). The register (cashier), the back office and the console (manager) and the device gateway (gateway) send it on every request; a request without it is not one of the apps and is served as the current API, and a device token of an app's kind without it is an app of an unknown version; a header that does not parse counts as absent. The node may refuse an app 426 app_update_required by it, except on the operations marked x-app-update-exempt. Not a security boundary (spec/API.md, Transport; spec/RELEASES.md, Who is asking).
state query RolloutState
limit query integer
after query string The cursor of the previous page.

Responses

  • 200 OK object
  • 401 Error (spec/API.md). Error
  • 403 Error (spec/API.md). Error
POST /v1/rollouts Start a rollout of a verified release in waves. 409 rollout_active while another is unfinished; 422 invalid_rollout with a reason.

operationId createRollout · Permission release.manage

Parameters

Name In Type Description
IRetail-App header string Which app sends the request, at which version: <app>/<version>, optionally a space and (<platform>), as cashier/1.2.0 (windows-x64) or manager/1.2.0 (web). The register (cashier), the back office and the console (manager) and the device gateway (gateway) send it on every request; a request without it is not one of the apps and is served as the current API, and a device token of an app's kind without it is an app of an unknown version; a header that does not parse counts as absent. The node may refuse an app 426 app_update_required by it, except on the operations marked x-app-update-exempt. Not a security boundary (spec/API.md, Transport; spec/RELEASES.md, Who is asking).
Idempotency-Key header string spec/API.md, Idempotency.

Request body required

Responses

  • 201 Started; the first wave's stores are given their targets. Rollout
  • 400 Error (spec/API.md). Error
  • 401 Error (spec/API.md). Error
  • 403 Error (spec/API.md). Error
  • 409 Error (spec/API.md). Error
  • 422 Error (spec/API.md). Error
GET /v1/rollouts/{id} One rollout with its waves.

operationId getRollout · Permission release.read

Parameters

Name In Type Description
id required path string (uuid)
IRetail-App header string Which app sends the request, at which version: <app>/<version>, optionally a space and (<platform>), as cashier/1.2.0 (windows-x64) or manager/1.2.0 (web). The register (cashier), the back office and the console (manager) and the device gateway (gateway) send it on every request; a request without it is not one of the apps and is served as the current API, and a device token of an app's kind without it is an app of an unknown version; a header that does not parse counts as absent. The node may refuse an app 426 app_update_required by it, except on the operations marked x-app-update-exempt. Not a security boundary (spec/API.md, Transport; spec/RELEASES.md, Who is asking).

Responses

GET /v1/rollouts/{id}/stores Each store of a rollout with its wave, update state and gate status, in the waves' order.

operationId listRolloutStores · Permission release.read

Parameters

Name In Type Description
id required path string (uuid)
IRetail-App header string Which app sends the request, at which version: <app>/<version>, optionally a space and (<platform>), as cashier/1.2.0 (windows-x64) or manager/1.2.0 (web). The register (cashier), the back office and the console (manager) and the device gateway (gateway) send it on every request; a request without it is not one of the apps and is served as the current API, and a device token of an app's kind without it is an app of an unknown version; a header that does not parse counts as absent. The node may refuse an app 426 app_update_required by it, except on the operations marked x-app-update-exempt. Not a security boundary (spec/API.md, Transport; spec/RELEASES.md, Who is asking).
limit query integer
after query string The cursor of the previous page.

Responses

  • 200 OK object
  • 401 Error (spec/API.md). Error
  • 403 Error (spec/API.md). Error
  • 404 Error (spec/API.md). Error
POST /v1/rollouts/{id}/pause Pause a running rollout; the current wave's stores that have not begun applying lose their targets. 409 rollout_state otherwise.

operationId pauseRollout · Permission release.manage

Parameters

Name In Type Description
id required path string (uuid)
IRetail-App header string Which app sends the request, at which version: <app>/<version>, optionally a space and (<platform>), as cashier/1.2.0 (windows-x64) or manager/1.2.0 (web). The register (cashier), the back office and the console (manager) and the device gateway (gateway) send it on every request; a request without it is not one of the apps and is served as the current API, and a device token of an app's kind without it is an app of an unknown version; a header that does not parse counts as absent. The node may refuse an app 426 app_update_required by it, except on the operations marked x-app-update-exempt. Not a security boundary (spec/API.md, Transport; spec/RELEASES.md, Who is asking).

Responses

  • 200 OK Rollout
  • 401 Error (spec/API.md). Error
  • 403 Error (spec/API.md). Error
  • 404 Error (spec/API.md). Error
  • 409 Error (spec/API.md). Error
POST /v1/rollouts/{id}/resume Resume a paused rollout on its current wave, as a new attempt for the stores not done; the current wave's stores whose apps are held for the release have the hold cleared (apps_cleared_at). 409 rollout_state otherwise.

operationId resumeRollout · Permission release.manage

Parameters

Name In Type Description
id required path string (uuid)
IRetail-App header string Which app sends the request, at which version: <app>/<version>, optionally a space and (<platform>), as cashier/1.2.0 (windows-x64) or manager/1.2.0 (web). The register (cashier), the back office and the console (manager) and the device gateway (gateway) send it on every request; a request without it is not one of the apps and is served as the current API, and a device token of an app's kind without it is an app of an unknown version; a header that does not parse counts as absent. The node may refuse an app 426 app_update_required by it, except on the operations marked x-app-update-exempt. Not a security boundary (spec/API.md, Transport; spec/RELEASES.md, Who is asking).

Responses

  • 200 OK Rollout
  • 401 Error (spec/API.md). Error
  • 403 Error (spec/API.md). Error
  • 404 Error (spec/API.md). Error
  • 409 Error (spec/API.md). Error
POST /v1/rollouts/{id}/rollback Send every store that took the release back to its previous version, at once. 409 rollout_state from rolling_back or rolled_back, 409 rollout_not_latest for an older rollout, 409 rollout_active while another is unfinished.

operationId rollbackRollout · Permission release.manage

Parameters

Name In Type Description
id required path string (uuid)
IRetail-App header string Which app sends the request, at which version: <app>/<version>, optionally a space and (<platform>), as cashier/1.2.0 (windows-x64) or manager/1.2.0 (web). The register (cashier), the back office and the console (manager) and the device gateway (gateway) send it on every request; a request without it is not one of the apps and is served as the current API, and a device token of an app's kind without it is an app of an unknown version; a header that does not parse counts as absent. The node may refuse an app 426 app_update_required by it, except on the operations marked x-app-update-exempt. Not a security boundary (spec/API.md, Transport; spec/RELEASES.md, Who is asking).

Responses

  • 200 OK Rollout
  • 401 Error (spec/API.md). Error
  • 403 Error (spec/API.md). Error
  • 404 Error (spec/API.md). Error
  • 409 Error (spec/API.md). Error
POST /v1/rollouts/{id}/stores/{store_id}/skip Take a store out of a rollout; a target it has not finished is withdrawn and the gate passes it. 409 rollout_state in completed or rolled_back.

operationId skipRolloutStore · Permission release.manage

Parameters

Name In Type Description
id required path string (uuid)
store_id required path string (uuid)
IRetail-App header string Which app sends the request, at which version: <app>/<version>, optionally a space and (<platform>), as cashier/1.2.0 (windows-x64) or manager/1.2.0 (web). The register (cashier), the back office and the console (manager) and the device gateway (gateway) send it on every request; a request without it is not one of the apps and is served as the current API, and a device token of an app's kind without it is an app of an unknown version; a header that does not parse counts as absent. The node may refuse an app 426 app_update_required by it, except on the operations marked x-app-update-exempt. Not a security boundary (spec/API.md, Transport; spec/RELEASES.md, Who is asking).

Responses

POST /v1/rollouts/{id}/stores/{store_id}/clear-apps Clear a store's held apps for the rollout's release (spec/RELEASES.md, One device first) by writing its target again with apps_cleared_at. 409 rollout_state in rolled_back; 404 for a store the rollout does not cover or whose target was withdrawn.

operationId clearRolloutStoreApps · Permission release.manage

Parameters

Name In Type Description
id required path string (uuid)
store_id required path string (uuid)
IRetail-App header string Which app sends the request, at which version: <app>/<version>, optionally a space and (<platform>), as cashier/1.2.0 (windows-x64) or manager/1.2.0 (web). The register (cashier), the back office and the console (manager) and the device gateway (gateway) send it on every request; a request without it is not one of the apps and is served as the current API, and a device token of an app's kind without it is an app of an unknown version; a header that does not parse counts as absent. The node may refuse an app 426 app_update_required by it, except on the operations marked x-app-update-exempt. Not a security boundary (spec/API.md, Transport; spec/RELEASES.md, Who is asking).

Responses

GET /v1/app-update What an app of the hub's office store, or the console on a desktop, should run, by the release the hub runs, one device first (spec/RELEASES.md, The apps); as a store's getAppUpdate. A hub that does not hold the release it runs offers no installer.

operationId getHubAppUpdate · Permission store.read

Parameters

Name In Type Description
IRetail-App header string Which app sends the request, at which version: <app>/<version>, optionally a space and (<platform>), as cashier/1.2.0 (windows-x64) or manager/1.2.0 (web). The register (cashier), the back office and the console (manager) and the device gateway (gateway) send it on every request; a request without it is not one of the apps and is served as the current API, and a device token of an app's kind without it is an app of an unknown version; a header that does not parse counts as absent. The node may refuse an app 426 app_update_required by it, except on the operations marked x-app-update-exempt. Not a security boundary (spec/API.md, Transport; spec/RELEASES.md, Who is asking).
app required query AppId
platform required query ReleasePlatform
current query string The app's own version; left out for a first install.

Responses

POST /v1/app-update/report An app of the hub's office store, or the console, reports where its update stands (spec/RELEASES.md, Reporting); as a store's postAppUpdateReport.

A device's token or an employee's session on a device; at most 1 KiB and one accepted report a minute.

operationId postHubAppUpdateReport

Parameters

Name In Type Description
IRetail-App header string Which app sends the request, at which version: <app>/<version>, optionally a space and (<platform>), as cashier/1.2.0 (windows-x64) or manager/1.2.0 (web). The register (cashier), the back office and the console (manager) and the device gateway (gateway) send it on every request; a request without it is not one of the apps and is served as the current API, and a device token of an app's kind without it is an app of an unknown version; a header that does not parse counts as absent. The node may refuse an app 426 app_update_required by it, except on the operations marked x-app-update-exempt. Not a security boundary (spec/API.md, Transport; spec/RELEASES.md, Who is asking).

Request body required

Responses

  • 204 Kept.
  • 400 Error (spec/API.md). Error
  • 401 Error (spec/API.md). Error
  • 403 Error (spec/API.md). Error
  • 413 Error (spec/API.md). Error
  • 429 Error (spec/API.md). Error
POST /v1/app-update/clear Clear the hub's office store's hold of a release for an app and platform (spec/RELEASES.md, One device first). 404 when nothing is held.

operationId clearHubAppUpdateHold · Permission release.manage

Parameters

Name In Type Description
IRetail-App header string Which app sends the request, at which version: <app>/<version>, optionally a space and (<platform>), as cashier/1.2.0 (windows-x64) or manager/1.2.0 (web). The register (cashier), the back office and the console (manager) and the device gateway (gateway) send it on every request; a request without it is not one of the apps and is served as the current API, and a device token of an app's kind without it is an app of an unknown version; a header that does not parse counts as absent. The node may refuse an app 426 app_update_required by it, except on the operations marked x-app-update-exempt. Not a security boundary (spec/API.md, Transport; spec/RELEASES.md, Who is asking).

Request body required

Responses

  • 204 Cleared.
  • 400 Error (spec/API.md). Error
  • 401 Error (spec/API.md). Error
  • 403 Error (spec/API.md). Error
  • 404 Error (spec/API.md). Error
GET /v1/releases/{version}/manifest The signed manifest of a release the hub holds verified, for its office store's devices, the console and its updater; the caller verifies it with its own embedded keys. 404 for a release not held or not verified.

operationId getHubReleaseManifest · Permission store.read

Parameters

Name In Type Description
version required path string A release's version (spec/RELEASES.md).
IRetail-App header string Which app sends the request, at which version: <app>/<version>, optionally a space and (<platform>), as cashier/1.2.0 (windows-x64) or manager/1.2.0 (web). The register (cashier), the back office and the console (manager) and the device gateway (gateway) send it on every request; a request without it is not one of the apps and is served as the current API, and a device token of an app's kind without it is an app of an unknown version; a header that does not parse counts as absent. The node may refuse an app 426 app_update_required by it, except on the operations marked x-app-update-exempt. Not a security boundary (spec/API.md, Transport; spec/RELEASES.md, Who is asking).

Responses

GET /v1/releases/{version}/artifacts/{name} A file of a release the hub holds verified; Range resumes a broken download. The caller checks its size and SHA-256 against the manifest.

operationId getHubReleaseArtifact · Permission store.read

Parameters

Name In Type Description
version required path string A release's version (spec/RELEASES.md).
name required path string The artifact's name in the manifest.
IRetail-App header string Which app sends the request, at which version: <app>/<version>, optionally a space and (<platform>), as cashier/1.2.0 (windows-x64) or manager/1.2.0 (web). The register (cashier), the back office and the console (manager) and the device gateway (gateway) send it on every request; a request without it is not one of the apps and is served as the current API, and a device token of an app's kind without it is an app of an unknown version; a header that does not parse counts as absent. The node may refuse an app 426 app_update_required by it, except on the operations marked x-app-update-exempt. Not a security boundary (spec/API.md, Transport; spec/RELEASES.md, Who is asking).
Range header string One byte range, bytes=<first>- or bytes=<first>-<last>.

Responses

  • 200 The whole file. string (binary)
  • 206 The range asked for, with Content-Range. string (binary)
  • 401 Error (spec/API.md). Error
  • 403 Error (spec/API.md). Error
  • 404 Error (spec/API.md). Error
  • 416 The range is outside the file.
GET /v1/hub-update The hub's own update (spec/RELEASES.md, The hub's own update).

operationId getHubUpdate · Permission release.read

Parameters

Name In Type Description
IRetail-App header string Which app sends the request, at which version: <app>/<version>, optionally a space and (<platform>), as cashier/1.2.0 (windows-x64) or manager/1.2.0 (web). The register (cashier), the back office and the console (manager) and the device gateway (gateway) send it on every request; a request without it is not one of the apps and is served as the current API, and a device token of an app's kind without it is an app of an unknown version; a header that does not parse counts as absent. The node may refuse an app 426 app_update_required by it, except on the operations marked x-app-update-exempt. Not a security boundary (spec/API.md, Transport; spec/RELEASES.md, Who is asking).

Responses

PUT /v1/hub-update Set the hub's own target, applied by its updater. 404 for a version not held, 409 release_not_verified, 409 stores_incompatible unless forced, 422 release_refused (downgrade) for an earlier version that is not the previous one.

operationId putHubUpdate · Permission release.manage

Parameters

Name In Type Description
IRetail-App header string Which app sends the request, at which version: <app>/<version>, optionally a space and (<platform>), as cashier/1.2.0 (windows-x64) or manager/1.2.0 (web). The register (cashier), the back office and the console (manager) and the device gateway (gateway) send it on every request; a request without it is not one of the apps and is served as the current API, and a device token of an app's kind without it is an app of an unknown version; a header that does not parse counts as absent. The node may refuse an app 426 app_update_required by it, except on the operations marked x-app-update-exempt. Not a security boundary (spec/API.md, Transport; spec/RELEASES.md, Who is asking).

Request body required

Responses

  • 200 OK HubUpdate
  • 400 Error (spec/API.md). Error
  • 401 Error (spec/API.md). Error
  • 403 Error (spec/API.md). Error
  • 404 Error (spec/API.md). Error
  • 409 Error (spec/API.md). Error
  • 422 Error (spec/API.md). Error

Schemas

AlertKind "node_silent" | "node_behind" | "shift_open_long" | "certificate_expiring" | "redis_down" | "backup_overdue"

node_silent · node_behind · shift_open_long · certificate_expiring · redis_down · backup_overdue

Release @store:Release

ReleaseDownload @store:ReleaseDownload

AvailableRelease @store:AvailableRelease

RolloutState "running" | "paused" | "paused_by_gate" | "rolling_back" | "rolled_back" | "completed"

spec/RELEASES.md, States.

running · paused · paused_by_gate · rolling_back · rolled_back · completed

RolloutWaveInput object | object

A wave of named stores, or a percentage of the stores left.

RolloutGate object

healthy_minutes required integer

RolloutCreate object

release required string A version the hub holds, verified.
stores array of string (uuid) The stores it covers; every store with an active node when left out.
waves array of RolloutWaveInput One store, a quarter of the rest, then the rest when left out.
gate RolloutGate
window UpdateWindow | null In each store's own time zone; null for any time; 02:00 to 05:00 when left out.
store_windows map of UpdateWindow | null A window, or null for any time, per store id, over window.

GatePause object

The store and the reason the gate paused the rollout.

store_id required string (uuid)
reason required "failed" | "rolled_back" | "alert" | "app_failed"
alert_kind required AlertKind | null
app AppId For app_failed, the app held first; absent otherwise.
platform ReleasePlatform For app_failed, its platform.

Rollout object

id required string (uuid)
release required string
state required RolloutState
waves required array of object
current_wave required integer Counted from 0.
gate required RolloutGate
window required UpdateWindow | null
store_windows required map of UpdateWindow | null
paused_by_gate required GatePause | null Set while the state is paused_by_gate.
resumed_at required string (date-time) | null
created_by required string (uuid)
created_at required string (date-time)
finished_at required string (date-time) | null When it was completed or rolled back.
version required integer (int64)

RolloutStore object

store_id required string (uuid)
wave required integer
skipped required boolean
state required UpdateState | null From the store's last report; null before one.
gate_status required "pending" | "passed" | "healthy" | "updating" | "silent" | "unhealthy" | "failed" | "rolled_back" | "alert" | "app_failed" | "skipped" pending for a store of a later wave; otherwise the gate's status (spec/RELEASES.md, The gate).
running_version required string | null
previous_version required string | null What the store ran when it was first given the target; what a rollback returns to.
target_version required string | null
action required "update" | "rollback" | null
started_at required string (date-time) | null
done_at required string (date-time) | null
healthy_since required string (date-time) | null
step required UpdateStep | null
error required string | null

HubUpdatePut object

version required string
window UpdateWindow | null In the hub's time zone (its office store's); null for at once; left out, 02:00 to 05:00. In UTC with no default before 1.1.
force boolean Go ahead although the new version would refuse a store the hub serves.

HubUpdate object

running_version required string
previous_version required string | null
target required object | null
state required UpdateState
state_since required string (date-time) | null
step required UpdateStep | null
error required string | null
updater required "compose" | "none"
backup required UpdateBackup | null
rehearsal required UpdateRehearsal | null The hub rehearses only when asked (node migrate --rehearse); null without a rehearsal.
background_tasks required array of BackgroundTask
apps required array of AppVersionCount The hub's office store's apps, as a store's GET /v1/update gives them.
app_offers required array of AppOffer